日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringCloud-Eureka

發(fā)布時(shí)間:2024/9/15 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud-Eureka 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文:https://xsxy007.github.io/2019/10/SpringCloud-Eureka/
Eureka 是Netflix開(kāi)源的一款提供服務(wù)注冊(cè)和發(fā)現(xiàn)的產(chǎn)品,提供了完整的Service Registery和Service Discovery實(shí)現(xiàn),也是SpringCloud體系中最核心的組件之一

Eureka


由上邊的圖可以看出,Eureka由客戶(hù)端和服務(wù)端組成,服務(wù)用用于服務(wù)的注冊(cè)服務(wù)器,客戶(hù)端用作服務(wù)的提供者和發(fā)現(xiàn)者

案例

git@github.com:xsxy007/springcloud-demo.git

Eureka Server

springboot 已經(jīng)很好的支持了Eureka,只需要在pom中加入Eureka依賴(lài),并在Application啟動(dòng)類(lèi)中加上相關(guān)注解即可

1、pom依賴(lài)添加

本次使用的springboot版本為2.1.9;springcloud版本為Greenwich.RELEASE

以下列出了所有的依賴(lài)(ps:一開(kāi)始因?yàn)閟pringcloud和springboot的版本依賴(lài)問(wèn)題,導(dǎo)致項(xiàng)目一直啟動(dòng)報(bào)錯(cuò))

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Greenwich.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2、在啟動(dòng)類(lèi)上加注解@EnableEurekaServer注解

@SpringBootApplication @EnableEurekaServer public class SpringcloudDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringcloudDemoApplication.class, args);} }

3、配置文件

在默認(rèn)配置下,該注冊(cè)中心會(huì)將自己作為客戶(hù)端嘗試注冊(cè)自己,因此在單機(jī)的注冊(cè)中心時(shí),需要將此機(jī)制關(guān)閉掉

server:port: 8761 # 使用的是默認(rèn)的端口 spring:application:name: eureka-server eureka:client:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://localhost:${server.port}/eureka/

eureka.client.register-with-eureka:表示是否將自己注冊(cè)的eureka server,默認(rèn)為true
eureka.client.fetch-registry:表示是否從eureka server上拉取注冊(cè)信息,默認(rèn)為true
eureka.client.service-url.defaultZone:表示注冊(cè)中心的地址(默認(rèn)為localhost:8761/eureka/)

4、啟動(dòng)項(xiàng)目

啟動(dòng)項(xiàng)目后訪(fǎng)問(wèn)localhost:8761 即可顯示如下頁(yè)面,此時(shí) Instances current Registers里邊并沒(méi)有內(nèi)容

?

集群配置

簡(jiǎn)單的集群,只要將各個(gè)注冊(cè)中心相互配置即可
eureka.client.serviceUrl.defaultZone=http://域名:/${server.port}/eureka/,http://域名:/${server.port}/eureka/ 請(qǐng)其他注冊(cè)中心的地址配置的defaultZone中

源碼分析

從啟動(dòng)類(lèi)注解開(kāi)始 @EnableEurekaServer

  • 可以注意注釋中的EurekaServerAutoConfiguration,該類(lèi)就是EurekaServer的自動(dòng)配置類(lèi)
/*** Annotation to activate Eureka Server related configuration {@link EurekaServerAutoConfiguration}* @author Dave Syer* @author Biju Kunjummen*/ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(EurekaServerMarkerConfiguration.class) public @interface EnableEurekaServer {}
  • 再看上邊注解類(lèi)上有一個(gè) @Import(EurekaServerMarkerConfiguration.class),進(jìn)入該類(lèi)查看
// 可以看到,該類(lèi)并沒(méi)有什么實(shí)現(xiàn),該類(lèi)的作用:是為了控制 `EurekaServerAutoConfiguration` 類(lèi)是否加載 @Configuration public class EurekaServerMarkerConfiguration {@Beanpublic Marker eurekaServerMarkerBean() {return new Marker();}class Marker {} }
  • 查看 EurekaServerAutoConfiguration(該類(lèi)是在通過(guò)Springboot的@EnableAutoconfiguration 來(lái)加載spring.factories中的類(lèi)的)
// 省略了部分代碼 @Configuration @Import(EurekaServerInitializerConfiguration.class) @ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class) // 當(dāng)存在 EurekaServerMarkerConfiguration 類(lèi)是才初始化當(dāng)前文件 @EnableConfigurationProperties({ EurekaDashboardProperties.class,InstanceRegistryProperties.class }) @PropertySource("classpath:/eureka/server.properties") public class EurekaServerAutoConfiguration extends WebMvcConfigurerAdapter {// 實(shí)例化一個(gè)配置類(lèi),該配置類(lèi)在 EurekaServerInitializerConfiguration 中會(huì)使用到@Configurationprotected static class EurekaServerConfigBeanConfiguration {@Bean@ConditionalOnMissingBeanpublic EurekaServerConfig eurekaServerConfig(EurekaClientConfig clientConfig) {EurekaServerConfigBean server = new EurekaServerConfigBean();if (clientConfig.shouldRegisterWithEureka()) {// Set a sensible default if we are supposed to replicateserver.setRegistrySyncRetries(5);}return server;}}// eurekaServer的上下文@Beanpublic EurekaServerContext eurekaServerContext(ServerCodecs serverCodecs,PeerAwareInstanceRegistry registry, PeerEurekaNodes peerEurekaNodes) {return new DefaultEurekaServerContext(this.eurekaServerConfig, serverCodecs,registry, peerEurekaNodes, this.applicationInfoManager);}// eurekaServer的啟動(dòng)@Beanpublic EurekaServerBootstrap eurekaServerBootstrap(PeerAwareInstanceRegistry registry,EurekaServerContext serverContext) {return new EurekaServerBootstrap(this.applicationInfoManager,this.eurekaClientConfig, this.eurekaServerConfig, registry,serverContext);} }
  • 注意 EurekaServerInitializerConfiguration 類(lèi),該類(lèi)實(shí)現(xiàn)了lifecycle接口,所以會(huì)被spring容器毀掉start方法
@Overridepublic void start() {new Thread(new Runnable() {@Overridepublic void run() {try {//TODO: is this class even needed now?eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext);log.info("Started Eureka Server");publish(new EurekaRegistryAvailableEvent(getEurekaServerConfig()));EurekaServerInitializerConfiguration.this.running = true;publish(new EurekaServerStartedEvent(getEurekaServerConfig()));}catch (Exception ex) {// Help!log.error("Could not initialize Eureka servlet context", ex);}}}).start(); // 調(diào)用 start 方法啟動(dòng)線(xiàn)程}

參考: https://blog.csdn.net/cuixhao110/article/details/88353714

總結(jié)

以上是生活随笔為你收集整理的SpringCloud-Eureka的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。