09 搭建Eureka注冊(cè)中心

(1) 創(chuàng)建shop_eureka_server子模塊

在 shop_parent 下創(chuàng)建子模塊 shop_eureka_server 

(2) 引入maven坐標(biāo)

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

(3) 配置application.yml

server:
 port: 8761
eureka:
 instance:
   hostname: localhost
 client:
   registerWithEureka: false  
   fetchRegistry: false
   serviceUrl:
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

registerWithEureka: 是否將自己注冊(cè)到Eureka服務(wù)中,本身就是所有無需注冊(cè)

fetchRegistry : 是否從Eureka中獲取注冊(cè)信息

serviceUrlEureka: 客戶端與Eureka服務(wù)端進(jìn)行交互的地址

(4) 配置啟動(dòng)類

在 cn.muziwk.eureka 下創(chuàng)建啟動(dòng)類 EurekaServerApplication

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

EnableEurekaServer : 激活Eureka Server端配置

服務(wù)注冊(cè)中心管理后臺(tái)

打開瀏覽器訪問http://localhost8761即可進(jìn)入EurekaServer內(nèi)置的管理控制臺(tái),顯示效果如下

image-20211224212958777.png

服務(wù)注冊(cè)到Eureka注冊(cè)中心

商品服務(wù)注冊(cè)

(1) 商品模塊中引入坐標(biāo)

在 shop_service_product 的pom文件中添加eureka client的相關(guān)坐標(biāo)

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-commons</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

(2) 配置application.yml文件

在工程的 application.yml 中添加Eureka Server的主機(jī)地址

eureka:
 client:
   serviceUrl: # eureka server的路徑
     defaultZone: http://localhost:8761/eureka/
 instance:
   prefer-ip-address: true #使用ip注冊(cè)

(3) 修改啟動(dòng)類添加服務(wù)注冊(cè)注解

@SpringBootApplication
//@EnableDiscoveryClient
//@EnableEurekaClient
public class UserApplication {
 public static void main(String[] args) {
    SpringApplication.run(UserApplication.class, args);
 }
}

從Spring Cloud Edgware版本開始, @EnableDiscoveryClient 或 @EnableEurekaClient 可 省略。只需加上相關(guān)依賴,并進(jìn)行相應(yīng)配置,即可將微服務(wù)注冊(cè)到服務(wù)發(fā)現(xiàn)組件上。

訂單服務(wù)注冊(cè)

和商品微服務(wù)一樣,只需要引入坐標(biāo)依賴,在工程的 application.yml 中添加Eureka Server的主機(jī)地址 即可

用戶服務(wù)注冊(cè)

和商品微服務(wù)一樣,只需要引入坐標(biāo)依賴,在工程的 application.yml 中添加Eureka Server的主機(jī)地址 即可

Eureka中的自我保護(hù)

微服務(wù)第一次注冊(cè)成功之后,每30秒會(huì)發(fā)送一次心跳將服務(wù)的實(shí)例信息注冊(cè)到注冊(cè)中心。通知 Eureka Server 該實(shí)例仍然存在。如果超過90秒沒有發(fā)送更新,則服務(wù)器將從注冊(cè)信息中將此服務(wù)移除。 Eureka Server在運(yùn)行期間,會(huì)統(tǒng)計(jì)心跳失敗的比例在15分鐘之內(nèi)是否低于85%,如果出現(xiàn)低于的情況 (在單機(jī)調(diào)試的時(shí)候很容易滿足,實(shí)際在生產(chǎn)環(huán)境上通常是由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致),Eureka Server會(huì) 將當(dāng)前的實(shí)例注冊(cè)信息保護(hù)起來,同時(shí)提示這個(gè)警告。保護(hù)模式主要用于一組客戶端和Eureka Server 之間存在網(wǎng)絡(luò)分區(qū)場(chǎng)景下的保護(hù)。一旦進(jìn)入保護(hù)模式,Eureka Server將會(huì)嘗試保護(hù)其服務(wù)注冊(cè)表中的信息,不再刪除服務(wù)注冊(cè)表中的數(shù)據(jù)(也就是不會(huì)注銷任何微服務(wù)) 驗(yàn)證完自我保護(hù)機(jī)制開啟后,并不會(huì)馬上呈現(xiàn)到web上,而是默認(rèn)需等待 5 分鐘(可以通過 eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分鐘后你會(huì)看到下面的提示信息:


image-20211224213435243.png

如果關(guān)閉自我保護(hù)

通過設(shè)置 eureka.enableSelfPreservation=false 來關(guān)閉自我保護(hù)功能。

Eureka中的元數(shù)據(jù)

Eureka的元數(shù)據(jù)有兩種:標(biāo)準(zhǔn)元數(shù)據(jù)和自定義元數(shù)據(jù)。

  • 標(biāo)準(zhǔn)元數(shù)據(jù):主機(jī)名、IP地址、端口號(hào)、狀態(tài)頁(yè)和健康檢查等信息,這些信息都會(huì)被發(fā)布在服務(wù)注 冊(cè)表中,用于服務(wù)之間的調(diào)用。
  • 自定義元數(shù)據(jù):可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存儲(chǔ)格式。這 些元數(shù)據(jù)可以在遠(yuǎn)程客戶端中訪問。

在程序中可以使用DiscoveryClient 獲取指定微服務(wù)的所有元數(shù)據(jù)信息

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class RestTemplateTest {
 
 @Autowired
 private DiscoveryClient discoveryClient;
 @Test
 public void test() {
 //根據(jù)微服務(wù)名稱從注冊(cè)中心獲取相關(guān)的元數(shù)據(jù)信息
 List<ServiceInstance> instances = discoveryClient.getInstances("shop?service-product");
 for (ServiceInstance instance : instances) {
    System.out.println(instance);
 }
 }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容