Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëÀí½âEurekaÖ®Ô´Âë½âÎö
 
  1628  次浏览      28
 2019-6-21
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚ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»¹¿ÉÒÔ±»ÆäËû·þÎñÏû·Ñ¡£

   
1628 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù