package microservices.sample.discovery.hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.ISet; import microservices.sample.discovery.PublishedServiceInfo; import microservices.sample.discovery.ServiceRegistry; import static microservices.sample.discovery.hazelcast.HazelcastBuilder.PUBLISHED_SERVICES; /** * Simple Hazelcast-based implementation for ServiceDiscovery * * @author mamad * @since 17/03/15. */ public class HazelcastServiceRegistry implements ServiceRegistry { private final HazelcastInstance hazelcastInstance; public HazelcastServiceRegistry(HazelcastInstance hazelcastInstance) { this.hazelcastInstance = hazelcastInstance; } @Override public <S> void register(PublishedServiceInfo<S> serviceInfo) { //when a service register itself, all other processes will be notified (thanks to Hazelcast) ISet<Object> set = hazelcastInstance.getSet(PUBLISHED_SERVICES); set.add(serviceInfo); } @Override public <S> void deRegister(PublishedServiceInfo<S> serviceInfo) { ISet<Object> set = hazelcastInstance.getSet(PUBLISHED_SERVICES); set.remove(serviceInfo); } @Override public void shutdown() { hazelcastInstance.shutdown(); } }