±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁËEurekaµÄһЩ¸ÅÄ¸ß¿ÉÓüܹ¹ÒÔ¼°EurekaÖ®Ô´Âë½âÎö£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
|
|
EurekaµÄһЩ¸ÅÄî
Register£º·þÎñ×¢²á
µ±Eureka¿Í»§¶ËÏòEureka Server×¢²áʱ£¬ËüÌṩ×ÔÉíµÄÔªÊý¾Ý£¬±ÈÈçIPµØÖ·¡¢¶Ë¿Ú£¬ÔËÐÐ×´¿öָʾ·ûURL£¬Ö÷Ò³µÈ¡£
Renew£º·þÎñÐøÔ¼
Eureka¿Í»§»áÿ¸ô30Ãë·¢ËÍÒ»´ÎÐÄÌøÀ´ÐøÔ¼¡£ ͨ¹ýÐøÔ¼À´¸æÖªEureka Server¸ÃEureka¿Í»§ÈÔÈ»´æÔÚ£¬Ã»ÓгöÏÖÎÊÌâ¡£
Õý³£Çé¿öÏ£¬Èç¹ûEureka ServerÔÚ90ÃëûÓÐÊÕµ½Eureka¿Í»§µÄÐøÔ¼£¬Ëü»á½«ÊµÀý´ÓÆä×¢²á±íÖÐɾ³ý¡£
½¨Òé²»Òª¸ü¸ÄÐøÔ¼¼ä¸ô¡£
Fetch Registries£º»ñȡע²áÁбíÐÅÏ¢
Eureka¿Í»§¶Ë´Ó·þÎñÆ÷»ñȡע²á±íÐÅÏ¢£¬²¢½«Æä»º´æÔÚ±¾µØ¡£¿Í»§¶Ë»áʹÓøÃÐÅÏ¢²éÕÒÆäËû·þÎñ£¬´Ó¶ø½øÐÐÔ¶³Ìµ÷Ó᣸Ã×¢²áÁбíÐÅÏ¢¶¨ÆÚ£¨Ã¿30ÃëÖÓ£©¸üÐÂÒ»´Î¡£Ã¿´Î·µ»Ø×¢²áÁбíÐÅÏ¢¿ÉÄÜÓëEureka¿Í»§¶ËµÄ»º´æÐÅÏ¢²»Í¬£¬
Eureka¿Í»§¶Ë×Ô¶¯´¦Àí¡£Èç¹ûÓÉÓÚijÖÖÔÒòµ¼ÖÂ×¢²áÁбíÐÅÏ¢²»Äܼ°Ê±Æ¥Å䣬Eureka¿Í»§¶ËÔò»áÖØÐ»ñÈ¡Õû¸ö×¢²á±íÐÅÏ¢¡£
Eureka·þÎñÆ÷»º´æ×¢²áÁбíÐÅÏ¢£¬Õû¸ö×¢²á±íÒÔ¼°Ã¿¸öÓ¦ÓóÌÐòµÄÐÅÏ¢½øÐÐÁËѹËõ£¬Ñ¹ËõÄÚÈݺÍûÓÐѹËõµÄÄÚÈÝÍêÈ«Ïàͬ¡£Eureka¿Í»§¶ËºÍEureka
·þÎñÆ÷¿ÉÒÔʹÓÃJSON / XML¸ñʽ½øÐÐͨѶ¡£ÔÚĬÈϵÄÇé¿öÏÂEureka¿Í»§¶ËʹÓÃѹËõJSON¸ñʽÀ´»ñȡע²áÁбíµÄÐÅÏ¢¡£
Cancel£º·þÎñÏÂÏß
Eureka¿Í»§¶ËÔÚ³ÌÐò¹Ø±ÕʱÏòEureka·þÎñÆ÷·¢ËÍÈ¡ÏûÇëÇó¡£ ·¢ËÍÇëÇóºó£¬¸Ã¿Í»§¶ËʵÀýÐÅÏ¢½«´Ó·þÎñÆ÷µÄʵÀý×¢²á±íÖÐɾ³ý¡£¸ÃÏÂÏßÇëÇó²»»á×Ô¶¯Íê³É£¬ËüÐèÒªµ÷ÓÃÒÔÏÂÄÚÈÝ£º
DiscoveryManager.getInstance().shutdownComponent()£»
Eviction ·þÎñÌÞ³ý
ÔÚĬÈϵÄÇé¿öÏ£¬µ±Eureka¿Í»§¶ËÁ¬Ðø90ÃëûÓÐÏòEureka·þÎñÆ÷·¢ËÍ·þÎñÐøÔ¼£¬¼´ÐÄÌø£¬Eureka·þÎñÆ÷»á½«¸Ã·þÎñʵÀý´Ó·þÎñ×¢²áÁбíɾ³ý£¬¼´·þÎñÌÞ³ý¡£
EurekaµÄ¸ß¿ÉÓüܹ¹
ÈçͼΪEurekaµÄ¸ß¼¶¼Ü¹¹Í¼£¬¸ÃͼƬÀ´×ÔÓÚEureka¿ªÔ´´úÂëµÄÎĵµ£¬µØÖ·Îªhttps://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
¡£

´Óͼ¿ÉÒÔ¿´³öÔÚÕâ¸öÌåϵÖУ¬ÓÐ2¸ö½ÇÉ«£¬¼´Eureka ServerºÍEureka Client¡£¶øEureka
ClientÓÖ·ÖΪApplicaton ServiceºÍApplication Client£¬¼´·þÎñÌṩÕߺηþÎñÏû·ÑÕß¡£
ÿ¸öÇøÓòÓÐÒ»¸öEureka¼¯Èº£¬²¢ÇÒÿ¸öÇøÓòÖÁÉÙÓÐÒ»¸öeureka·þÎñÆ÷¿ÉÒÔ´¦ÀíÇøÓò¹ÊÕÏ£¬ÒÔ·À·þÎñÆ÷̱»¾¡£
Eureka ClientÏòEureka Serve×¢²á£¬²¢½«×Ô¼ºµÄһЩ¿Í»§¶ËÐÅÏ¢·¢ËÍEureka
Serve¡£È»ºó£¬Eureka Clientͨ¹ýÏòEureka Serve·¢ËÍÐÄÌø£¨Ã¿30Ã룩À´ÐøÔ¼·þÎñµÄ¡£
Èç¹û¿Í»§¶Ë³ÖÐø²»ÄÜÐøÔ¼£¬ÄÇô£¬Ëü½«ÔÚ´óÔ¼90ÃëÄÚ´Ó·þÎñÆ÷×¢²á±íÖÐɾ³ý¡£ ×¢²áÐÅÏ¢ºÍÐø¶©±»¸´ÖƵ½¼¯ÈºÖеÄEureka
ServeËùÓнڵ㡣 À´×ÔÈκÎÇøÓòµÄEureka Client¶¼¿ÉÒÔ²éÕÒ×¢²á±íÐÅÏ¢£¨Ã¿30Ãë·¢ÉúÒ»´Î£©¡£¸ù¾ÝÕâЩע²á±íÐÅÏ¢£¬Application
Client¿ÉÒÔÔ¶³Ìµ÷ÓÃApplicaton ServiceÀ´Ïû·Ñ·þÎñ¡£
Register·þÎñ×¢²á
·þÎñ×¢²á£¬¼´Eureka ClientÏòEureka ServerÌá½»×Ô¼ºµÄ·þÎñÐÅÏ¢£¬°üÀ¨IPµØÖ·¡¢¶Ë¿Ú¡¢service
IDµÈÐÅÏ¢¡£Èç¹ûEureka ClientûÓÐдservice ID£¬ÔòĬÈÏΪ ${spring.application.name}¡£
·þÎñ×¢²áÆäʵºÜ¼òµ¥£¬ÔÚEureka ClientÆô¶¯µÄʱºò£¬½«×ÔÉíµÄ·þÎñµÄÐÅÏ¢·¢Ë͵½Eureka
Server¡£ÏÖÔÚÀ´¼òµ¥µÄÔĶÁÏÂÔ´Âë¡£ÔÚMavenµÄÒÀÀµ°üÏ£¬ÕÒµ½eureka-client-1.6.2.jar°ü¡£ÔÚcom.netflix.discovery°üÏÂÓиöDiscoveryClientÀ࣬¸ÃÀà°üº¬ÁËEureka
ClientÏòEureka ServerµÄÏà¹Ø·½·¨¡£ÆäÖÐDiscoveryClientʵÏÖÁËEurekaClient½Ó¿Ú£¬²¢ÇÒËüÊÇÒ»¸öµ¥Àýģʽ£¬¶øEurekaClient¼Ì³ÐÁËLookupService½Ó¿Ú¡£ËüÃÇÖ®¼äµÄ¹ØÏµÈçͼËùʾ¡£

ÔÚDiscoveryClientÀàÓÐÒ»¸ö·þÎñ×¢²áµÄ·½·¨register()£¬¸Ã·½·¨ÊÇͨ¹ýHttpÇëÇóÏòEureka
Client×¢²á¡£Æä´úÂëÈçÏ£º
boolean register()
throws Throwable {
logger.info(PREFIX + appPathIdentifier + ":
registering service...");
EurekaHttpResponse<Void> httpResponse;
try {
httpResponse = eurekaTransport.registrationClient.
register
(instanceInfo);
} catch (Exception e) {
logger.warn("{} - registration failed {}",
PREFIX + appPathIdentifier, e.getMessage(),
e);
throw e;
}
if (logger.isInfoEnabled()) {
logger.info("{} - registration status:
{}", PREFIX + appPathIdentifier, httpResponse.getStatusCode());
}
return httpResponse.getStatusCode() == 204;
}
|
ÔÚDiscoveryClientÀà¼ÌÐø×·×Ùregister()·½·¨£¬Ëü±»InstanceInfoReplicator
ÀàµÄrun()·½·¨µ÷Óã¬ÆäÖÐInstanceInfoReplicatorʵÏÖÁËRunnable½Ó¿Ú£¬run()·½·¨´úÂëÈçÏ£º
public void
run() {
try {
discoveryClient.refreshInstanceInfo();
Long dirtyTimestamp = instanceInfo.isDirtyWithTime();
if (dirtyTimestamp != null) {
discoveryClient.register();
instanceInfo.unsetIsDirty(dirtyTimestamp);
}
} catch (Throwable t) {
logger.warn("There was a problem with the
instance info replicator", t);
} finally {
Future next = scheduler.schedule(this, replicationIntervalSeconds,
TimeUnit.SECONDS);
scheduledPeriodicRef.set(next);
}
} |
¶øInstanceInfoReplicatorÀàÊÇÔÚDiscoveryClient³õʼ»¯¹ý³ÌÖÐʹÓõ쬯äÖÐÓÐÒ»¸öinitScheduledTasks()·½·¨¡£¸Ã·½·¨Ö÷Òª¿ªÆôÁË»ñÈ¡·þÎñ×¢²áÁбíµÄÐÅÏ¢£¬Èç¹ûÐèÒªÏòEureka
Server×¢²á£¬Ôò¿ªÆô×¢²á£¬Í¬Ê±¿ªÆôÁ˶¨Ê±ÏòEureka Server·þÎñÐøÔ¼µÄ¶¨Ê±ÈÎÎñ£¬¾ßÌå´úÂëÈçÏ£º
private void
initScheduledTasks() {
...//Ê¡ÂÔÁËÈÎÎñµ÷¶È»ñȡע²áÁбíµÄ´úÂë
if (clientConfig.shouldRegisterWithEureka())
{
...
// Heartbeat timer
scheduler.schedule(
new TimedSupervisorTask(
"heartbeat",
scheduler,
heartbeatExecutor,
renewalIntervalInSecs,
TimeUnit.SECONDS,
expBackOffBound,
new HeartbeatThread()
),
renewalIntervalInSecs, TimeUnit.SECONDS);
// InstanceInfo replicator
instanceInfoReplicator = new InstanceInfoReplicator
(
this,
instanceInfo,
clientConfig.getInstanceInfoReplicationIntervalSeconds
(),
2); // burstSize
statusChangeListener = new ApplicationInfoManager.StatusChangeListener()
{
@Override
public String getId() {
return "statusChangeListener";
}
@Override
public void notify(StatusChangeEvent statusChangeEvent)
{
instanceInfoReplicator.onDemandUpdate();
}
};
...
}
|
È»ºóÔÚÀ´¿´Eureka server¶ËµÄ´úÂ룬ÔÚMavenµÄeureka-core:1.6.2µÄjar°üÏ¡£´ò¿ªcom.netflix.eureka°ü£¬ºÜÇáËɵľͷ¢ÏÖÁËÓÖÒ»¸öEurekaBootStrapµÄÀ࣬BootStrapContext¾ßÓÐ×îÏȳõʼ»¯µÄȨÏÞ£¬ËùÒÔÏÈ¿´Õâ¸öÀà¡£
protected void
initEurekaServerContext() throws Exception {
...//Ê¡ÂÔ´úÂë
PeerAwareInstanceRegistry registry;
if (isAws(applicationInfoManager.getInfo())) {
...//Ê¡ÂÔ´úÂ룬Èç¹ûÊÇAWSµÄ´úÂë
} else {
registry = new PeerAwareInstanceRegistryImpl(
eurekaServerConfig,
eurekaClient.getEurekaClientConfig(),
serverCodecs,
eurekaClient
);
}
PeerEurekaNodes peerEurekaNodes = getPeerEurekaNodes(
registry,
eurekaServerConfig,
eurekaClient.getEurekaClientConfig(),
serverCodecs,
applicationInfoManager
);
}
|
ÆäÖÐPeerAwareInstanceRegistryImplºÍPeerEurekaNodesÁ½¸öÀà¿´ÆäÃüÃû£¬Ó¦¸ÃºÍ·þÎñ×¢²áÒÔ¼°Eureka
Server¸ß¿ÉÓÃÓйء£ÏÈ×·×ÙPeerAwareInstanceRegistryImplÀ࣬ÔÚ¸ÃÀàÓиöregister()·½·¨£¬¸Ã·½·¨ÌṩÁË×¢²á£¬²¢ÇÒ½«×¢²áºóÐÅϢͬ²½µ½ÆäËûµÄEureka
Server·þÎñ¡£´úÂëÈçÏ£º
public void register(final
InstanceInfo info, final boolean isReplication)
{
int leaseDuration = Lease.DEFAULT_DURATION_IN_SECS;
if (info.getLeaseInfo() != null && info.getLeaseInfo().getDurationInSecs()
> 0) {
leaseDuration = info.getLeaseInfo().getDurationInSecs();
}
super.register(info, leaseDuration, isReplication);
replicateToPeers(Action.Register, info.getAppName(),
info.getId(), info, null, isReplication);
}
|
ÆäÖÐ super.register(info, leaseDuration, isReplication)·½·¨£¬µã»÷½øÈ¥µ½×ÓÀàAbstractInstanceRegistry¿ÉÒÔ·¢ÏÖ¸ü¶àϸ½Ú£¬ÆäÖÐ×¢²áÁбíµÄÐÅÏ¢±»±£´æÔÚÒ»¸öMapÖС£replicateToPeers()·½·¨£¬¼´Í¬²½µ½ÆäËûEureka
ServerµÄÆäËûPeers½Úµã£¬×·×Ù´úÂ룬·¢ÏÖËü»á±éÀúÑ»·ÏòËùÓеÄPeers½Úµã×¢²á£¬×îÖÕÖ´ÐÐÀàPeerEurekaNodesµÄregister()·½·¨£¬¸Ã·½·¨Í¨¹ýÖ´ÐÐÒ»¸öÈÎÎñÏòÆäËû½Úµãͬ²½¸Ã×¢²áÐÅÏ¢£¬´úÂëÈçÏ£º
public void
register(final InstanceInfo info) throws Exception
{
long expiryTime = System.currentTimeMillis() +
getLeaseRenewalOf(info);
batchingDispatcher.process(
taskId("register", info),
new InstanceReplicationTask(targetHost, Action.Register,
info, null, true) {
public EurekaHttpResponse<Void> execute()
{
return replicationClient.register(info);
}
},
expiryTime
);
} |
¾¹ýһϵÁеÄÔ´Âë×·×Ù£¬¿ÉÒÔ·¢ÏÖPeerAwareInstanceRegistryImplµÄregister()·½·¨ÊµÏÖÁË·þÎñµÄ×¢²á£¬²¢ÇÒÏòÆäËûEureka
ServerµÄPeer½Úµãͬ²½Á˸Ã×¢²áÐÅÏ¢£¬ÄÇôregister()·½·¨±»Ëµ÷ÓÃÁËÄØ£¿Ö®Ç°ÔÚEureka
ClientµÄ·ÖÎö¿ÉÒÔÖªµÀ£¬Eureka ClientÊÇͨ¹ý httpÀ´ÏòEureka Server×¢²áµÄ£¬ÄÇôEureka
Server¿Ï¶¨»áÌṩһ¸ö×¢²áµÄ½Ó¿Ú¸øEureka Clientµ÷Óã¬ÄÇôPeerAwareInstanceRegistryImplµÄregister()·½·¨¿Ï¶¨×îÖջᱻ±©Â¶µÄHttp½Ó¿ÚËùµ÷Óá£ÔÚIdea¿ª·¢¹¤¾ß£¬°´×¡alt+Êó±ê×ó¼ü£¬¿ÉÒԺܿ춨λµ½ApplicationResourceÀàµÄaddInstance
()·½·¨£¬¼´·þÎñ×¢²áµÄ½Ó¿Ú£¬Æä´úÂëÈçÏ£º
@POST
@Consumes({"application/json", "application/xml"})
public Response addInstance(InstanceInfo info,
@HeaderParam(PeerEurekaNode.HEADER_REPLICATION)
String isReplication) {
...//Ê¡ÂÔ´úÂë
registry.register(info, "true".equals(isReplication));
return Response.status(204).build(); // 204 to
be backwards compatible
}
|
Renew·þÎñÐøÔ¼
·þÎñÐøÔ¼ºÍ·þÎñ×¢²á·Ç³£ÀàËÆ£¬Í¨¹ý֮ǰµÄ·ÖÎö¿ÉÒÔÖªµÀ£¬·þÎñ×¢²áÔÚEureka Client³ÌÐòÆô¶¯Ö®ºó¿ªÆô£¬²¢Í¬Ê±¿ªÆô·þÎñÐøÔ¼µÄ¶¨Ê±ÈÎÎñ¡£ÔÚeureka-client-1.6.2.jarµÄDiscoveryClientµÄÀàÏÂÓÐrenew()·½·¨£¬Æä´úÂëÈçÏ£º
/**
* Renew with the eureka service by making the
appropriate REST call
*/
boolean renew() {
EurekaHttpResponse<InstanceInfo> httpResponse;
try {
httpResponse = eurekaTransport.registrationClient.sendHeartBeat
(instanceInfo.getAppName(), instanceInfo.getId(),
instanceInfo, null);
logger.debug("{} - Heartbeat status: {}",
PREFIX + appPathIdentifier, httpResponse.getStatusCode());
if (httpResponse.getStatusCode() == 404) {
REREGISTER_COUNTER.increment();
logger.info("{} - Re-registering apps/{}",
PREFIX + appPathIdentifier, instanceInfo.getAppName());
return register();
}
return httpResponse.getStatusCode() == 200;
} catch (Throwable e) {
logger.error("{} - was unable to send heartbeat!",
PREFIX + appPathIdentifier, e);
return false;
}
}
|
ÁíÍâ·þÎñ¶ËµÄÐøÔ¼½Ó¿ÚÔÚeureka-core:1.6.2.jarµÄ com.netflix.eureka°üϵÄInstanceResourceÀàÏ£¬½Ó¿Ú·½·¨ÎªrenewLease()£¬ËüÊÇREST½Ó¿Ú¡£ÎªÁ˼õÉÙÀàÆª·ù£¬Ê¡ÂÔÁ˴󲿷ִúÂëµÄչʾ¡£ÆäÖÐÓиöregistry.renew()·½·¨£¬¼´·þÎñÐøÔ¼£¬´úÂëÈçÏÂ:
@PUT
public Response renewLease(...²ÎÊýÊ¡ÂÔ£©{
... ´úÂëÊ¡ÂÔ
boolean isSuccess=registry.renew(app.getName(),id,
isFromReplicaNode);
... ´úÂëÊ¡ÂÔ
} |
¶ÁÕß¿ÉÒÔ¸ú×Ùregistry.renewµÄ´úÂëÒ»Ö±ÉîÈëÑо¿¡£ÔÚÕâÀï¾Í²»ÔٶིÊö¡£ÁíÍâ·þÎñÐøÔ¼ÓÐ2¸ö²ÎÊýÊÇ¿ÉÒÔÅäÖ㬼´Eureka
Client·¢ËÍÐøÔ¼ÐÄÌøµÄʱ¼ä²ÎÊýºÍEureka ServerÔڶ೤ʱ¼äÄÚûÓÐÊÕµ½ÐÄÌø½«ÊµÀýÌÞ³ýµÄʱ¼ä²ÎÊý£¬ÔÚĬÈϵÄÇé¿öÏÂÕâÁ½¸ö²ÎÊý·Ö±ðΪ30ÃëºÍ90Ã룬¹Ù·½¸øµÄ½¨ÒéÊDz»ÒªÐ޸ģ¬Èç¹ûÓÐÌØÊâÒªÇó»¹ÊÇ¿ÉÒÔµ÷ÕûµÄ£¬Ö»ÐèÒª·Ö±ðÔÚEureka
ClientºÍEureka ServerÐÞ¸ÄÒÔϲÎÊý£º
eureka.instance.leaseRenewalIntervalInSeconds
eureka.instance.leaseExpirationDurationInSeconds
|
×îºó£¬·þÎñ×¢²áÁбíµÄ»ñÈ¡¡¢·þÎñÏÂÏߺͷþÎñÌÞ³ý¾Í²»ÔÚÕâÀï½øÐÐÔ´Âë¸ú×Ù½â¶Á£¬ÒòΪºÍ·þÎñ×¢²áºÍÐøÔ¼ÀàËÆ£¬ÓÐÐËȤµÄÅóÓÑ¿ÉÒÔ×Ô¼º¿´ÏÂÔ´Â룬ÉîÈëÀí½â¡£×ܵÄÀ´Ëµ£¬Í¨¹ý¶ÁÔ´Â룬¿ÉÒÔ·¢ÏÖ£¬ÕûÌå¼Ü¹¹ÓëÇ°ÃæÐ¡½ÚµÄeureka
µÄ¸ß¿ÉÓüܹ¹Í¼ÍêȫһÖ¡£
Eureka Client×¢²áÒ»¸öʵÀýΪʲôÕâôÂý
Eureka ClientÒ»Æô¶¯£¨²»ÊÇÆô¶¯Íê³É£©£¬²»ÊÇÁ¢¼´ÏòEureka Server×¢²á£¬ËüÓÐÒ»¸öÑÓ³ÙÏò·þÎñ¶Ë×¢²áµÄʱ¼ä£¬Í¨¹ý¸ú×ÙÔ´Â룬¿ÉÒÔ·¢ÏÖĬÈϵÄÑÓ³Ùʱ¼äΪ40Ã룬ԴÂëÔÚeureka-client-1.6.2.jarµÄDefaultEurekaClientConfigÀàÏ£¬´úÂëÈçÏ£º
public int getInitialInstanceInfoReplicationIntervalSeconds()
{
return configInstance.getIntProperty(
namespace + INITIAL_REGISTRATION_REPLICATION_DELAY_KEY,
40).get();
}
|
Eureka ServerµÄÏìÓ¦»º´æ
Eureka Serverά»¤Ã¿30Ãë¸üеÄÏìÓ¦»º´æ,¿Éͨ¹ý¸ü¸ÄÅäÖÃeureka.server.responseCacheUpdateIntervalMsÀ´Ð޸ġ£
ËùÒÔ¼´Ê¹ÊµÀý¸Õ¸Õ×¢²á£¬ËüÒ²²»»á³öÏÖÔÚµ÷ÓÃ/ eureka / apps REST¶ËµãµÄ½á¹ûÖС£
Eureka Serverˢлº´æ
Eureka¿Í»§¶Ë±£Áô×¢²á±íÐÅÏ¢µÄ»º´æ¡£ ¸Ã»º´æÃ¿30Ãë¸üÐÂÒ»´Î£¨ÈçǰËùÊö£©¡£ Òò ´Ë£¬¿Í»§¶Ë¾ö¶¨Ë¢ÐÂÆä±¾µØ»º´æ²¢·¢ÏÖÆäËûÐÂ×¢²áµÄʵÀý¿ÉÄÜÐèÒª30Ãë¡£
LoadBalancer Refresh
RibbonµÄ¸ºÔØÆ½ºâÆ÷´Ó±¾µØµÄEureka Client»ñÈ¡·þÎñ×¢²áÁбíÐÅÏ¢¡£Ribbon±¾Éí»¹Î¬»¤±¾µØ»º´æ£¬ÒÔ±ÜÃâΪÿ¸öÇëÇóµ÷Óñ¾µØ¿Í»§¶Ë¡£
´Ë»º´æÃ¿30ÃëË¢ÐÂÒ»´Î£¨¿ÉÓÉribbon.ServerListRefreshIntervalÅäÖã©¡£
ËùÒÔ£¬¿ÉÄÜÐèÒª30¶àÃë²ÅÄÜʹÓÃÐÂ×¢²áµÄʵÀý¡£
×ÛÉϼ¸¸öÒòËØ£¬Ò»¸öÐÂ×¢²áµÄʵÀý£¬ÌرðÊÇÆô¶¯½Ï¿ìµÄʵÀý£¨Ä¬ÈÏÑÓ³Ù40Ãë×¢²á£©£¬²»ÄÜÂíÉϱ»Eureka
Server·¢ÏÖ¡£ÁíÍ⣬¸Õ×¢²áµÄEureka ClientÒ²²»ÄÜÁ¢¼´±»ÆäËû·þÎñµ÷Óã¬ÒòΪµ÷Ó÷½ÒòΪ¸÷ÖÖ»º´æÃ»Óм°Ê±µÄ»ñÈ¡µ½ÐµÄ×¢²áÁÐ±í¡£
Eureka µÄ×ÔÎÒ±£»¤Ä£Ê½
µ±Ò»¸öеÄEureka Server³öÏÖʱ£¬Ëü³¢ÊÔ´ÓÏàÁÚ½Úµã»ñÈ¡ËùÓÐʵÀý×¢²á±íÐÅÏ¢¡£Èç¹û´ÓPeer½Úµã»ñÈ¡ÐÅϢʱ³öÏÖÎÊÌ⣬Eureka
Serve»á³¢ÊÔÆäËûµÄPeer½Úµã¡£Èç¹û·þÎñÆ÷Äܹ»³É¹¦»ñÈ¡ËùÓÐʵÀý£¬Ôò¸ù¾Ý¸ÃÐÅÏ¢ÉèÖÃÓ¦¸Ã½ÓÊյĸüÐÂãÐÖµ¡£Èç¹ûÓÐÈκÎʱ¼ä£¬Eureka
Serve½ÓÊÕµ½µÄÐøÔ¼µÍÓÚΪ¸ÃÖµÅäÖõİٷֱȣ¨Ä¬ÈÏΪ15·ÖÖÓÄÚµÍÓÚ85£¥£©£¬Ôò·þÎñÆ÷¿ªÆô×ÔÎÒ±£»¤Ä£Ê½£¬¼´²»ÔÙÌÞ³ý×¢²áÁбíµÄÐÅÏ¢¡£
ÕâÑù×öµÄºÃ´¦¾ÍÊÇ£¬Èç¹ûÊÇEureka Server×ÔÉíµÄÍøÂçÎÊÌ⣬µ¼ÖÂEureka ClientµÄÐøÔ¼²»ÉÏ£¬Eureka
ClientµÄ×¢²áÁбíÐÅÏ¢²»ÔÙ±»É¾³ý£¬Ò²¾ÍÊÇEureka Client»¹¿ÉÒÔ±»ÆäËû·þÎñÏû·Ñ¡£
|