1. 程式人生 > 其它 >Nacos:服務提供者、消費者註冊

Nacos:服務提供者、消費者註冊

技術標籤:SpringCloud學習java

Nacos:服務提供者、消費者使用

花開堪折直需折,莫待無花空折枝

服務提供者進入Nacos註冊中心:

建一個modul:cloudalibaba-provider-payment9001

pom:

<dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency
>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--監控--> <dependency> <groupId>org.springframework.boot</groupId> <
artifactId
>
spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>
true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>

配置檔案:application.yml

server:
  port: 9002
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

主啟動類:

@SpringBootApplication
@EnableDiscoveryClient
public class Payment9001Main {
    public static void main(String[] args) {
        SpringApplication.run(Payment9001Main.class,args);
    }
}

業務類:

@RestController
public class NacosController {
    @Value("${server.port}")
    private String serverPort;
    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") int id){
        return "nacos registry, serverPort:"+serverPort+"\t id:"+id;
    }
}

以同樣的方式再建立一個:cloudalibaba-provider-payment9002

服務消費者進入Nacos註冊中心:

建一個modul: cloudalibaba-consumer-nacos-order83

pom:

<dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--監控-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

配置檔案:application.yml

server:
  port: 83
spring:
  application:
    name: nacos-payment-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

主啟動類:

@SpringBootApplication
@EnableDiscoveryClient
public class Order83Main {
    public static void main(String[] args) {
        SpringApplication.run(Order83Main.class,args);
    }
}

編寫配置類:

@Configuration
public class AppContentConfig {
    @Bean
    @LoadBalanced//開啟ribbon負載均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

業務類:

@RestController
public class OrderNacosController {

    private  Logger loggerFactory=LoggerFactory.getLogger(getClass());
    @Autowired
    private RestTemplate restTemplate;

    private String serviceUrl="http://nacos-payment-provider";

    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") int id){
        return restTemplate.getForObject(serviceUrl+"/payment/nacos/"+id,String.class);
    }
}

測試:

在這裡插入圖片描述

在這裡插入圖片描述

由於RestTemplate加入了Ribbon負載均衡註解,會使用輪詢方式實現均衡;

不過為什麼知道是Ribbon負載均衡呢,可以看一下jar包的關係:

在這裡插入圖片描述

因為nacos的jar包中預設集成了Ribbon

問題

在這裡插入圖片描述

看報錯資訊可以知道,是因為服務註冊同時有Nacos和Eureka,

分析:

不知道使用哪一個報錯,所以這裡去掉eureka的包(開始倒錯了)

在這裡插入圖片描述

在此執行,有報錯:所找不到EurekaClient,想一下不對頭,

在這裡插入圖片描述

看了一下主啟動類的@EnableDiscoveryClient是用的是Eureka的:
在這裡插入圖片描述

解決:

  • 去掉Eureka的包,
  • 使用nacos的服務發現包

轉載請註明來源,謝謝