一、EurekaServer 多節(jié)點(diǎn)搭建
1、目標(biāo):如下圖,這一步我們建立兩個(gè) EurekaServer 節(jié)點(diǎn),端口分別為7001和7002,然后讓這兩個(gè)節(jié)點(diǎn)之間可以【互相注冊,相互守望】

image.png
2、參照 cloud-eureka-server7001 新建 moudle cloud-eureka-server7002
參照《七、(Eureka篇)單機(jī)Eureka 服務(wù)端和客戶端配置》(http://www.itdecent.cn/p/02fc3c38b315)來新建
3、修改yml
cloud-eureka-server-7001 的 yml 文件修改如下。
(1)eureka.instance.hostname:之前的服務(wù)名 hostname 都是 localhost,現(xiàn)在多個(gè)節(jié)點(diǎn)不能用同一個(gè)名字了,以示區(qū)分,分別用 eureka7001.com 和 eureka7001.com
(2)eureka.client.service-url.defaultZone:相互注冊,所以 7001 注冊進(jìn) 7002 , 7002 注冊進(jìn)7001中
server:
port: 7001
eureka:
instance:
# hostname: localhost #eureka 服務(wù)端的實(shí)例名稱
hostname: eureka7001.com #eureka 服務(wù)端的實(shí)例名稱
client:
register-with-eureka: false #false表示不向注冊中心注冊自己
fetch-registry: false #是否去注冊中心fetch信息,false表示自己就是注冊中心,所以自己不必找自己去檢索服務(wù)
service-url:
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #設(shè)置與eureka server交互的地址查詢服務(wù)和注冊服務(wù)都需要依賴這個(gè)地址
defaultZone: http://eureka7002.com:7002/eureka/ #設(shè)置與eureka server交互的地址查詢服務(wù)和注冊服務(wù)都需要依賴這個(gè)地址
同理,cloud-eureka-server-7002 的 yml 文件修改如下圖
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com #eureka 服務(wù)端的實(shí)例名稱
client:
register-with-eureka: false #false表示不向注冊中心注冊自己
fetch-registry: false #是否去注冊中心fetch信息,false表示自己就是注冊中心,所以自己不必找自己去檢索服務(wù)
service-url:
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #設(shè)置與eureka server交互的地址查詢服務(wù)和注冊服務(wù)都需要依賴這個(gè)地址
defaultZone: http://eureka7001.com:7001/eureka/ #設(shè)置與eureka server交互的地址查詢服務(wù)和注冊服務(wù)都需要依賴這個(gè)地址
4、修改 hosts 文件中的域名映射
hosts文件地址:C:\Windows\System32\drivers\etc,需要用管理員權(quán)限才能修改。

image.png
5、此時(shí)先后啟動(dòng) 7001 和 7002
在瀏覽器中分別輸入 http://http://eureka7001.com:7001 和 http://eureka7002.com:7002,可以看到他們之間相互注冊

7001.png
二、業(yè)務(wù)模塊 cloud-payment-service 多節(jié)點(diǎn)搭建
1、新建moudle moudle cloud-payment-service8002
(1)參照 cloud-payment-service8001 ,新建moudle cloud-payment-service8002,修改一下啟動(dòng)類名和yml 中的端口,改為 8002
(2)為了方便區(qū)分調(diào)用的是哪個(gè)接口,在 controller 中打印調(diào)用的端口,如下圖

image.png
2、修改 yml ,8001 和 8002都要修改
eureka.client.service-url.defaultZone:之前是注冊到單節(jié)點(diǎn) eureka 上,現(xiàn)在注冊到多個(gè)節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)地址都要加上。所以該值修改為:http://http://eureka7001.com/eureka,http://http://eureka7001.com/eureka

image.png
3、修改 cloud-consumer-order80 服務(wù)中 OderController 調(diào)用 支付模塊的服務(wù)地址。
該地址就是 支付模塊 中 yml 配置的服務(wù)名

image.png

image.png
4、負(fù)載均衡
使用 @LoadBalanced 賦予 RestTemplate 負(fù)載均衡的能力。
修改 cloud-consumer-order80 服務(wù)的配置類 ApplicationContextConfig.java
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //使用 @LoadBalanced 賦予 RestTemplate 負(fù)載均衡的能力
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
5、按順序啟動(dòng),調(diào)用接口測試
(1)先啟動(dòng) EurekaServer 的所有節(jié)點(diǎn):7001和7002。
(2)啟動(dòng)支付模塊:8001 和 8002
(3)啟動(dòng)消費(fèi)者模塊:80
在 eureka 的 dashboard 可以看到我們注冊了 8001 和 8002 兩個(gè) 支付模塊 的節(jié)點(diǎn)

image.png
多次訪問消費(fèi)模塊,查看返回信息中的端口號是 8001 和 8002 交替展示,說明負(fù)載均衡實(shí)現(xiàn)了輪詢策略。到此,集群 Eureka 的搭建成功!

image.png

image.png
三、actuator 微服務(wù)信息完善
actuator 可以用來監(jiān)控、管理、控制 springBoot項(xiàng)目,比如健康檢查、資源使用情況,接口訪問情況等??梢酝ㄟ^常用的 http 接口訪問的方式來實(shí)現(xiàn)。
我們的目的是為了像下圖一樣:
1、實(shí)例名稱自定義,方便區(qū)分
2、鼠標(biāo)懸停在實(shí)例名稱上時(shí),左下角展示 ip+port 信息
在 application.yml 中加入針對實(shí)例的如下配置即可:
instance.instance-id:=order80 當(dāng)前實(shí)例id
instance.prefer-ip-address:=true 是否展示ip地址信息
server:
port: 80
spring:
application:
name: cloud-order-service
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: order80 #當(dāng)前實(shí)例id
prefer-ip-address: true #是否展示ip地址信息

image.png