Skip to content

Instantly share code, notes, and snippets.

@nevzatseferoglu
Last active June 26, 2022 12:46
Show Gist options
  • Save nevzatseferoglu/37199fd3e2bcd7aa1cbdadc5843a2f5d to your computer and use it in GitHub Desktop.
Save nevzatseferoglu/37199fd3e2bcd7aa1cbdadc5843a2f5d to your computer and use it in GitHub Desktop.
hazelcast go client membership listener
/*
* Copyright (c) 2008-2021, Hazelcast, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package main
import (
"context"
"log"
"sync"
"github.com/hazelcast/hazelcast-go-client"
pubcluster "github.com/hazelcast/hazelcast-go-client/cluster"
)
func main() {
var (
wgAdded,
wgRemoved sync.WaitGroup
)
wgAdded.Add(1)
wgRemoved.Add(1)
ctx := context.TODO()
client, err := hazelcast.StartNewClient(ctx)
if err != nil {
log.Fatal(err)
}
defer func(client *hazelcast.Client, ctx context.Context) {
err = client.Shutdown(ctx)
if err != nil {
log.Fatal(err)
}
}(client, ctx)
_, err = client.AddMembershipListener(func(event pubcluster.MembershipStateChanged) {
switch event.State {
case pubcluster.MembershipStateAdded:
wgAdded.Done()
case pubcluster.MembershipStateRemoved:
wgRemoved.Done()
}
log.Printf("Event: %s, member-id: %s\n", event.State, event.Member.UUID)
})
if err != nil {
log.Fatal(err)
}
wgRemoved.Wait()
wgAdded.Wait()
}
@nevzatseferoglu
Copy link
Author

nevzatseferoglu commented Jun 24, 2022

There are running members on 5701, 5702, 5703. Client is firstly connected to 5701. Then, member running on 5701 is closed and started again.

Console output:

2022/06/26 15:43:41 INFO : trying to connect to cluster: dev
2022/06/26 15:43:41 INFO : connected to cluster: dev
2022/06/26 15:43:41 INFO : 

Members {size:3, ver:3} [
        Member 127.0.0.1:5701 - 04423b6f-d07c-4721-8b80-c5dd53b4e8ca
        Member 127.0.0.1:5702 - 533c2e68-ea1d-4dff-8f08-1ba05e197360
        Member 127.0.0.1:5703 - a7a9f8fe-2892-49e0-b5fe-0275ee9595ea
]

2022/06/26 15:44:07 INFO : 

Members {size:2, ver:4} [
        Member 127.0.0.1:5702 - 533c2e68-ea1d-4dff-8f08-1ba05e197360
        Member 127.0.0.1:5703 - a7a9f8fe-2892-49e0-b5fe-0275ee9595ea
]

2022/06/26 15:44:07 Event: removed, member-id: 04423b6f-d07c-4721-8b80-c5dd53b4e8ca
2022/06/26 15:44:21 INFO : 

Members {size:3, ver:5} [
        Member 127.0.0.1:5702 - 533c2e68-ea1d-4dff-8f08-1ba05e197360
        Member 127.0.0.1:5703 - a7a9f8fe-2892-49e0-b5fe-0275ee9595ea
        Member 127.0.0.1:5701 - c375e0df-48ed-4de2-8996-8713a921e5ab
]

2022/06/26 15:44:21 Event: added, member-id: c375e0df-48ed-4de2-8996-8713a921e5ab

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment