1.基本原理概述
在微服務呼叫過程中主要是兩個角色一個是服務的消費者,一個是服務的提供者
服務提供者:提供介面供其它微服務訪問
服務消費者:呼叫其它微服務提供的介面
大型微服務專案中,服務提供者的數量會非常多,為了管理這些服務,就需要註冊中心來對這些服務進行一個統一管理,服務消費者,服務提供者,註冊中心三者關係:
1.服務消費者先把自己的服務放在註冊中心統一進行管理
2.服務消費者在需要服務呼叫時向註冊中心發起申請
3.服務消費者根據負載均衡策略進行服務的挑選呼叫
2.主流的註冊中心管理工具
- Eureka:Netflix公司出品,目前被整合在SpringCloud當中,一般用於Java應用
- Nacos:Alibaba公司出品,目前被整合在SpringCloudAlibaba中,一般用於Java應用
- Consul:HashiCorp公司出品,目前整合在SpringCloud中,不限制微服務語言
3.Nacos註冊中心
由於Nacos是國內產品,中文文件比較豐富,而且同時具備配置管理功能,因此在國內使用較多,所以介紹nacos註冊中心管理工具
4.Nacos註冊發現
1.匯入依賴
點選檢視程式碼
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.yaml配置檔案
點選檢視程式碼
spring:
application:
name: item-service #註冊到Nacos的服務名,不寫會報錯
cloud:
nacos:
discovery: #服務註冊
server-addr: localhost:8848
3.測試
可以發現已經註冊成功
5.服務呼叫
這裡我使用的是openFeign來進行遠端服務的呼叫
1.匯入依賴
點選檢視程式碼
<!--openFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--負載均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
在這裡我新建了一個hm-api的模組
3.建立client介面
點選檢視程式碼
package com.hmall.api.client;
import com.hmall.api.config.DefaultFeignConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Collection;
@FeignClient(value = "cart-service",configuration = DefaultFeignConfig.class)
public interface CartClient {
@DeleteMapping("/carts")
void deleteCartItemByIds(@RequestParam("ids") Collection<Long> ids);
}
點選檢視程式碼
package com.hmall.api.config;
import com.hmall.common.utils.UserContext;
import feign.Logger;
import feign.RequestInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class DefaultFeignConfig {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.FULL;
}
}
建立完成api後打jar包然後回到消費者處pom匯入內部依賴
5.引導類加註解
6.呼叫
發現可以直接注入itemClient
呼叫成功功能實現