/** * Returns the set of members currently registered with the connector. * <p/> * Note that any changes in membership are not reflected in the returned set. * * @return the set of members currently registered with the connector */ public Set<ConsistentHash.Member> getMembers() { return consistentHash.get().getMembers(); }
private void reportDisconnectedMembers(ConsistentHashChange hashChange) { Set<ConsistentHash.Member> newMembers = hashChange.newHash.getMembers(); Set<ConsistentHash.Member> oldMembers = new HashSet<ConsistentHash.Member>(hashChange.oldHash.getMembers()); oldMembers.removeAll(newMembers); String[] memberNames = new String[oldMembers.size()]; int i=0; for (ConsistentHash.Member member : oldMembers) { memberNames[i++] = member.name(); } logger.info("Member(s) disconnected: {}. Rebuilt consistent hash ring.", Arrays.toString(memberNames)); }
/** * Update the local member and all the other remote members known by the * {@link org.springframework.cloud.client.discovery.DiscoveryClient} to be able to have an as up-to-date awareness * of which actions which members can handle. This function is automatically triggered by an (unused) * {@link org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent}. Upon this event we may assume * that the application has fully start up. Because of this we can update the local member with the correct name and * {@link java.net.URI}, as initially these were not provided by the * {@link org.springframework.cloud.client.serviceregistry.Registration} yet. * * @param event an unused {@link org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent}, serves * as a trigger for this function * @see SpringCloudCommandRouter#buildMember(ServiceInstance) */ @EventListener @SuppressWarnings("UnusedParameters") public void resetLocalMembership(InstanceRegisteredEvent event) { registered = true; Member startUpPhaseLocalMember = atomicConsistentHash.get().getMembers().stream() .filter(Member::local) .findFirst() .orElseThrow(() -> new IllegalStateException( "There should be no scenario where the local member does not exist." )); if (logger.isDebugEnabled()) { logger.debug("Resetting local membership for [{}].", startUpPhaseLocalMember); } updateMemberships(); atomicConsistentHash.updateAndGet(consistentHash -> consistentHash.without(startUpPhaseLocalMember)); }