Nacos:服務提供者、消費者註冊
阿新 • • 發佈:2021-01-17
技術標籤: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的服務發現包
轉載請註明來源,謝謝