遠(yuǎn)程調(diào)用的問題
- 服務(wù)消費者該如何獲取服務(wù)提供者的地址信息?
- 有多個服務(wù)提供者,消費者該如何選擇?
- 消費者如何得知服務(wù)提供者的健康狀態(tài)?
Eureka的作用
- 服務(wù)端 :eureka注冊中心,記錄和管理各種服務(wù)
- 客戶端:微服務(wù)
- 每個微服務(wù)啟動時會把自己的信息注冊給eureka
- 消費者根據(jù)服務(wù)名稱從eureka拉取提供者信息
- 消費者用負(fù)載均衡挑選一個提供者服務(wù)。向提供者發(fā)請求。
- 服務(wù)每隔30秒都會向eureka發(fā)送一次心跳來確認(rèn)自己的狀態(tài),eureka會將不健康的服務(wù)從列表中剔除
搭建注冊中心
- 引入eureka-server依賴
<!--eureka服務(wù)器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 添加@EnableEurekaServer注解,自動裝配eureka
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
- 在application.yml中配置eureka地址,做服務(wù)注冊
server:
port: 10086 #服務(wù)端口
spring:
application:
name: eurekaserver #eureka的服務(wù)名稱
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
-
啟動main方法
image.png
服務(wù)注冊
將user-service服務(wù)注冊到EurekaService:
- 在user-service項目引入依賴
<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注冊了三個服務(wù)
image.png
模擬多實例部署
可以將user-service多次啟動,模擬多實例部署,但為了避免端口沖突,需要修改端口配置

image.png

image.png
啟動服務(wù),會發(fā)現(xiàn)eureka里面會出現(xiàn)服務(wù)注冊列表

image.png
服務(wù)發(fā)現(xiàn)
在order-service完成服務(wù)拉取
服務(wù)拉取是基于服務(wù)名稱獲取服務(wù)列表,然后再對列表做負(fù)載均衡。
- 訪問的url路徑用服務(wù)名代替ip,端口
//String url = "http://localhost:8081/user/" + order.getUserId();
String url = "http://userservice/user/" + order.getUserId();
- 在order-service項目的啟動類OrderApplication中的RestTemplate添加負(fù)載均衡注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
- 重啟order-service,調(diào)用,查看user-service日志,會發(fā)現(xiàn)order-service負(fù)載均衡調(diào)用了user-service

