簡述:Eureka 是天生集群的,搭建配置相當(dāng)簡單:不論你有多少的機(jī)器部署,只要相互之間指定對方的注冊中心地址就可以了,而多個 Eureka Server 之間是通過復(fù)制的方式完成注冊服務(wù)的同步,遵循AP原則。
優(yōu)點:
- 從設(shè)計角度來看,Eureka可以說是無懈可擊,注冊中心、提供者、調(diào)用者邊界清晰通過去中心化的集群支持保證了注冊中心的整體可用性。
- 可以運行多個實例來構(gòu)建集群,解決單點問題。但不同于 ZooKeeper 的選舉 leader 的過程,Eureka Server 采用的是Peer to Peer 對等通信。這是一種去中心化的架構(gòu),無 master/slave 之分,每一個 Peer 都是對等的。在這種架構(gòu)風(fēng)格中,節(jié)點通過彼此互相注冊來提高可用性,每個節(jié)點需要添加一個或多個有效的 serviceUrl 指向其他節(jié)點。每個節(jié)點都可被視為其他節(jié)點的副本。因此,Eureka可以很好的應(yīng)對因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點失去聯(lián)系的情況。
缺點:
1.Eureka屬于應(yīng)用內(nèi)的注冊方式,對應(yīng)用的侵入性太強(qiáng),且只支持Java應(yīng)用。
eureka集群注冊中心的搭建以及測試:
搭建三個注冊中心(也可以多個或者兩個,因為eureka集群是p2p的,并不是選舉模式,故可隨意增加數(shù)量且搭建簡單)
簡而言之,首先搭建父項目springcloud用于統(tǒng)一管理包,然后創(chuàng)建springcloud_eureka的頂級項目,在該項目下創(chuàng)建三個注冊中心eureka1、eureka2、eureka3以及測試用的生產(chǎn)者項目provider以及消費者項目consumer,測試注冊中心是否正常。
整體目錄結(jié)構(gòu)如下:
- 首先創(chuàng)建springcloud項目并在其創(chuàng)建子項目springcloud-eureka項目(該項目下pom文件保持創(chuàng)建時默認(rèn)配置即可),并在springcloud項目的pom文件中添加以下配置:
<!--spring boot-->
<parent>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-parent</artifactId>
????<version>2.6.11</version>
????<relativePath/>
</parent>
<!--Spring Cloud-->
<dependencyManagement>
????<dependencies>
????????<dependency>
????????????<groupId>org.springframework.cloud</groupId>
????????????<artifactId>spring-cloud-dependencies</artifactId>
????????????<version>2021.0.2</version>
????????????<type>pom</type>
????????????<scope>import</scope>
????????</dependency>
????</dependencies>
</dependencyManagement>
2.然后在springcloud-eureka項目下創(chuàng)建三個注冊中心項目,并在pom文件中添加以下配置,同時對于三個注冊中心的application配置需要稍微修改其中幾個配置項:
Pom文件添加以下依賴:
<dependencies>
????<dependency>
????????<groupId>org.springframework.boot</groupId>
????????<artifactId>spring-boot-starter-web</artifactId>
????</dependency>
????<!--eureka-server-->
????<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-actuator</artifactId>
????</dependency>
</dependencies>
Application.yml配置文件添加以下:
server:
??port: 8761
eureka:
??instance:
????# 配置主機(jī)名,請在【Host】文件中進(jìn)行主機(jī)名與本機(jī)ip的映射配置
????hostname: eureka-server1
????# 顯示 ip 地址,代替顯示主機(jī)名
????prefer-ip-address: true
????# 所注冊服務(wù)實例名稱的顯示形式
????instance-id: ${eureka.instance.hostname}:${server.port}
????# 每隔 3 秒發(fā)一次心跳包
????lease-renewal-interval-in-seconds: 3
????# 如果 15 秒沒有發(fā)送心跳包,就讓 eureka 把自己從服務(wù)列表中移除
????lease-expiration-duration-in-seconds: 15
??client:
????service-url:
??????# 想要搭建 eureka 集群,需要將自己注冊到其它的 eureka 中
??????# 因此這里需要配置其它 eureka 地址,多個地址以英文逗號分隔
??????defaultZone: http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
????# 是否將自己的路徑注冊到 eureka 上
????register-with-eureka: true
????# 是否需要從 eureka 中抓取路徑
????fetch-registry: true
??server:
????# 關(guān)閉 eureka 自我保護(hù),當(dāng)注冊的服務(wù)未及時發(fā)送心跳時,自動移除服務(wù)
????enable-self-preservation: false
????# eureka 檢查服務(wù)是否存在的時間間隔(毫秒)
????eviction-interval-timer-in-ms: 5000
??dashboard:
????enabled: true
????# eureka 監(jiān)控頁面路徑 默認(rèn)訪問: http://地址:端口
????path: "/"
# 集群需要使用相同的 application 名稱
spring:
??application:
????name: eureka-server-cluster
#actuator——springboot四大核心程序監(jiān)控器配置
# actuator 監(jiān)控配置
management:
??#actuator端口 如果不配置做默認(rèn)使用上面8080端口
??server:
????port: 7761
??info:
????env:
??????enabled: true
??endpoints:
????web:
??????exposure:
????????#默認(rèn)值訪問health,info端點 ?用*可以包含全部端點
????????include: "*"
??????#修改訪問路徑 2.0之前默認(rèn)是/; 2.0默認(rèn)是/actuator可以通過這個屬性值修改
??????base-path: /actuator
??endpoint:
????shutdown:
??????enabled: true #打開shutdown端點
????health:
??????show-details: always #獲得健康檢查中所有指標(biāo)的詳細(xì)信息
info:
??app.name: eureka注冊中心1機(jī)
??app.model: eureka
??app.desc: eureka集群中的第一臺機(jī)
??company.name: dogquan
??build.version: eureka 3.1.2
啟動類記得添加;@EnableEurekaServer
關(guān)于eureka-server1 需要在host文件中進(jìn)行映射,同理其它兩個中心。類比eureka1中心的創(chuàng)建,相繼可創(chuàng)建集群中其它兩個中心,創(chuàng)建完后先后啟動三個注冊中心,訪問地址http://eureka-server1:8761即可訪問到eureka監(jiān)控中心的相關(guān)信息。包括注冊的消費者,提供者以及集群的其它兩個注冊中心。
3.最后在springcloud-eureka項目下相繼又創(chuàng)建生產(chǎn)者provider以及consumer消費者項目進(jìn)行測試注冊中心的可用性(消費者又可以是生產(chǎn)者,兩者基于服務(wù)的供給相互切換身份):
生產(chǎn)者:
Pom文件中添加以下依賴:
<dependencies>
????<!--spring boot web-->
????<dependency>
????????<groupId>org.springframework.boot</groupId>
????????<artifactId>spring-boot-starter-web</artifactId>
????</dependency>
????<!--eureka-client-->
????<dependency>
????????<groupId>org.springframework.cloud</groupId>
????????<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
????</dependency>
</dependencies>
Application.yml配置文件添加以下配置:
server:
??port: 8200
eureka:
??instance:
????# 配置主機(jī)名,請在【Host】文件中進(jìn)行主機(jī)名與本機(jī)ip的映射配置
????hostname: provider_service
????# 顯示 ip 地址,代替顯示主機(jī)名
????prefer-ip-address: true
????# 所注冊服務(wù)實例名稱的顯示形式
????instance-id: ${eureka.instance.hostname}:${server.port}
????# 每隔 3 秒發(fā)一次心跳包
????lease-renewal-interval-in-seconds: 3
????# 如果 15 秒沒有發(fā)送心跳包,就讓 eureka 把自己從服務(wù)列表中移除
????lease-expiration-duration-in-seconds: 15
??client:
????service-url:
??????# 將當(dāng)前 springboot 服務(wù)注冊到所有的 eureka 中,多個地址以英文逗號分隔
??????defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
????# 是否將自己的路徑注冊到 eureka 上
????register-with-eureka: true
????# 是否需要從 eureka 中抓取路徑
????fetch-registry: true
# 集群需要使用相同的 application 名稱
spring:
??application:
????name: provider-App
創(chuàng)建controller層并添加以下代碼:
@RequestMapping("/provider")
@RestController
public class ProviderController {
????@RequestMapping("/getdata/{id}")
????public Map GetData(@PathVariable("id") int id) {
????????Map result = new HashMap();
????????result.put("status",0);
????????result.put("msg","success");
????????result.put("get_id_value",id);
????????result.put("version", UUID.randomUUID().toString());
????????return result;
????}
}
在啟動類Provider上記得添加:@EnableEurekaClient
@EnableEurekaClient
@SpringBootApplication
public class Provider {
????public static void main(String[] args) {
????????SpringApplication.run(Provider.class,args);
????}
}
消費者:
Pom文件添加以下依賴:
<dependencies>
????<!--spring boot web-->
????<dependency>
????????<groupId>org.springframework.boot</groupId>
????????<artifactId>spring-boot-starter-web</artifactId>
????</dependency>
????<!-- eureka-client -->
????<dependency>
????????<groupId>org.springframework.cloud</groupId>
????????<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
????</dependency>
</dependencies>
Application.yml配置中添加以下:
server:
??port: 8100
eureka:
??instance:
????# 配置主機(jī)名,請在【Host】文件中進(jìn)行主機(jī)名與本機(jī)ip的映射配置
????hostname: consumer_service
????# 顯示 ip 地址,代替顯示主機(jī)名
????prefer-ip-address: true
????# 所注冊服務(wù)實例名稱的顯示形式
????instance-id: ${eureka.instance.hostname}:${server.port}
????# 每隔 3 秒發(fā)一次心跳包
????lease-renewal-interval-in-seconds: 3
????# 如果 15 秒沒有發(fā)送心跳包,就讓 eureka 把自己從服務(wù)列表中移除
????lease-expiration-duration-in-seconds: 15
??client:
????service-url:
??????# 將當(dāng)前 springboot 服務(wù)注冊到所有的 eureka 中,多個地址以英文逗號分隔
??????defaultZone: http://eureka-server1:8761/eureka,http://eureka-server2:8762/eureka,http://eureka-server3:8763/eureka
????# 是否將自己的路徑注冊到 eureka 上
????register-with-eureka: true
????# 是否需要從 eureka 中抓取路徑
????fetch-registry: true
# 集群需要使用相同的 application 名稱
spring:
??application:
????name: consumer-App
增加restTemplateConfig用于簡化調(diào)用rest接口方式(主要方便測試):
@Configuration
public class RestTemplateConfig {
????@LoadBalanced
????@Bean
????public RestTemplate restTemplate(){
????????// RestTemplate 簡化了調(diào)用 Restful 接口的開發(fā)方式
????????return new RestTemplate();
????}
}
增加controller層:
@RequestMapping("/consumer")
@RestController
public class ConsumerController {
????@Autowired
????private RestTemplate restTemplate;
????@RequestMapping("/getdata/{id}")
????public Map GetData(@PathVariable("id") int id) {
????????//使用服務(wù)在 eureka 上注冊的 application 名稱代替 ip 和端口號
????????String url = "http://PROVIDER-APP/provider/getdata/" + id;
????????Map result = restTemplate.getForObject(url, Map.class);
????????return result;
????}
}
同理生產(chǎn)者,在啟動類中亦需要記得:@EnableEurekaClient
最后訪問瀏覽器中訪問生產(chǎn)者請求地址或者消費者請求地址,成功訪問即可。
備注:actuator組件為程序監(jiān)控,相關(guān)配置見于eureka注冊服務(wù)的配置文件application,同時需要在pom文件中添加以下依賴:文章來源:http://www.zghlxwxcb.cn/news/detail-755400.html
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
每一個服務(wù)都可添加該組件,主要用于監(jiān)控程序的相關(guān)信息,可以在eureka的監(jiān)控頁面對應(yīng)的info看到自定義的info信息(配置在application配置文件,詳情請自行;同時,注意生產(chǎn)環(huán)境中如果有使用該組件一定要做相關(guān)的權(quán)限訪問控制,不然會暴露系統(tǒng)內(nèi)部各種信息,信息泄漏的風(fēng)險極大。相關(guān)學(xué)習(xí)地址:Spring boot——Actuator 詳解_actuator springboot_奮斗喝咖啡的博客-CSDN博客)文章來源地址http://www.zghlxwxcb.cn/news/detail-755400.html
到了這里,關(guān)于一、開發(fā)環(huán)境window10微服務(wù)注冊中心搭建—Eureka的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!