Nacos服務註冊與發現

码字的小猪發表於2024-10-11

1.基本原理概述
在微服務呼叫過程中主要是兩個角色一個是服務的消費者,一個是服務的提供者

服務提供者:提供介面供其它微服務訪問

服務消費者:呼叫其它微服務提供的介面

大型微服務專案中,服務提供者的數量會非常多,為了管理這些服務,就需要註冊中心來對這些服務進行一個統一管理,服務消費者,服務提供者,註冊中心三者關係:

1.服務消費者先把自己的服務放在註冊中心統一進行管理
2.服務消費者在需要服務呼叫時向註冊中心發起申請
3.服務消費者根據負載均衡策略進行服務的挑選呼叫
2.主流的註冊中心管理工具

  • Eureka:Netflix公司出品,目前被整合在SpringCloud當中,一般用於Java應用
  • Nacos:Alibaba公司出品,目前被整合在SpringCloudAlibaba中,一般用於Java應用
  • Consul:HashiCorp公司出品,目前整合在SpringCloud中,不限制微服務語言

3.Nacos註冊中心
由於Nacos是國內產品,中文文件比較豐富,而且同時具備配置管理功能,因此在國內使用較多,所以介紹nacos註冊中心管理工具
4.Nacos註冊發現
1.匯入依賴
image

點選檢視程式碼
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

2.yaml配置檔案

image

點選檢視程式碼
spring:
  application:
    name: item-service  #註冊到Nacos的服務名,不寫會報錯
  cloud:
    nacos:
      discovery: #服務註冊
        server-addr: localhost:8848

3.測試
image
可以發現已經註冊成功
5.服務呼叫
這裡我使用的是openFeign來進行遠端服務的呼叫
1.匯入依賴
image

點選檢視程式碼
        <!--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>
2.新建模組處理遠端呼叫

image

在這裡我新建了一個hm-api的模組

3.建立client介面
image

點選檢視程式碼
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;
    }

}

4.依賴匯入

建立完成api後打jar包然後回到消費者處pom匯入內部依賴

image

5.引導類加註解
image

6.呼叫
image
發現可以直接注入itemClient
image
呼叫成功功能實現

相關文章