📢 本文由 gemini-3-flash-preview 翻譯
引入註冊中心之前先引入提供者與消費者概念
提供者與消費者
服務提供者:一次業務中,被其他微服務呼叫的服務。(提供介面給其他微服務)
服務消費者:一次業務中,呼叫其他微服務的服務。(呼叫其他微服務提供的介面)
提供者與消費者是相對的,一個服務既可以是提供者也可以是消費者
Eureka
若提供者有多個,消費者如何獲取提供者資訊,如何得知提供者的健康狀態
在啟動時,微服務向 Eureka 註冊服務資訊,消費者可透過 Eureka 抓取提供者資訊,然後進行遠端呼叫。微服務會每 30 秒向 Eureka 說明自己還活著,Eureka 會更新紀錄服務列表資訊,剔除不健康的伺服器
如果有多個服務提供者,消費者利用負載平衡演算法,從服務列表中挑選一個
建置
新建一個 Maven 模組,引入相依性
1
2
3
4
| <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
|
撰寫啟動類別
1
2
3
4
5
6
7
| @EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
|
設定檔
1
2
3
4
5
6
7
8
9
| server:
port: 7995
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:7995/eureka
|
註冊服務
引入相依性
1
2
3
4
| <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
|
撰寫設定
1
2
3
4
5
6
7
| spring:
application:
name: userService
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:7995/eureka
|
服務使用
承上例註冊
1
2
3
4
5
| @Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
|
修改呼叫的網域名稱為服務名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| @Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1. 查詢訂單
Order order = orderMapper.findById(orderId);
// 2. 查詢使用者
// String url = "http://localhost:8081/user/" + order.getUserId();
String url = "http://userService/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
// 3. 封裝使用者資訊
order.setUser(user);
// 4. 回傳
return order;
}
}
|