遠(yuǎn)程調(diào)用的問題
- 服務(wù)消費(fèi)者該如何獲取服務(wù)提供者的地址信息?
- 有多個(gè)服務(wù)提供者贮庞,消費(fèi)者該如何選擇?
- 消費(fèi)者如何得知服務(wù)提供者的健康狀態(tài)陵且?
Eureka的作用
- 服務(wù)端 :eureka注冊(cè)中心杜顺,記錄和管理各種服務(wù)
- 客戶端:微服務(wù)
- 每個(gè)微服務(wù)啟動(dòng)時(shí)會(huì)把自己的信息注冊(cè)給eureka
- 消費(fèi)者根據(jù)服務(wù)名稱從eureka拉取提供者信息
- 消費(fèi)者用負(fù)載均衡挑選一個(gè)提供者服務(wù)财搁。向提供者發(fā)請(qǐng)求。
- 服務(wù)每隔30秒都會(huì)向eureka發(fā)送一次心跳來確認(rèn)自己的狀態(tài)躬络,eureka會(huì)將不健康的服務(wù)從列表中剔除
搭建注冊(cè)中心
- 引入eureka-server依賴
<!--eureka服務(wù)器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 添加@EnableEurekaServer注解尖奔,自動(dòng)裝配eureka
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
- 在application.yml中配置eureka地址,做服務(wù)注冊(cè)
server:
port: 10086 #服務(wù)端口
spring:
application:
name: eurekaserver #eureka的服務(wù)名稱
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
-
啟動(dòng)main方法
image.png
服務(wù)注冊(cè)
將user-service服務(wù)注冊(cè)到EurekaService:
- 在user-service項(xiàng)目引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 在application.yml中配置
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
-
同樣配置order-service穷当,重啟服務(wù)之后提茁,可以看到eureka注冊(cè)了三個(gè)服務(wù)
image.png
模擬多實(shí)例部署
可以將user-service多次啟動(dòng),模擬多實(shí)例部署馁菜,但為了避免端口沖突茴扁,需要修改端口配置
image.png
image.png
啟動(dòng)服務(wù),會(huì)發(fā)現(xiàn)eureka里面會(huì)出現(xiàn)服務(wù)注冊(cè)列表
image.png
服務(wù)發(fā)現(xiàn)
在order-service完成服務(wù)拉取
服務(wù)拉取是基于服務(wù)名稱獲取服務(wù)列表汪疮,然后再對(duì)列表做負(fù)載均衡峭火。
- 訪問的url路徑用服務(wù)名代替ip,端口
//String url = "http://localhost:8081/user/" + order.getUserId();
String url = "http://userservice/user/" + order.getUserId();
- 在order-service項(xiàng)目的啟動(dòng)類OrderApplication中的RestTemplate添加負(fù)載均衡注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
- 重啟order-service智嚷,調(diào)用卖丸,查看user-service日志,會(huì)發(fā)現(xiàn)order-service負(fù)載均衡調(diào)用了user-service