Nacos的作用:主要用于服务注册和服务配置,效果和consul差不多
Nacos是AP 高可用 consul是CP 强一致
首先我们开始操作
cmd 到安装目录的bin目录 用startup.cmd -m standalone命令启动nacos
在这里插入图片描述
启动后凭借console进入Nacos
开始服务入住
建moudle 引依赖
之所以要nacos-client降级,请看这位博主的
https://blog.csdn.net/weixin_55127182/article/details/135658537
改完后记得清缓存,否则还会报错。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- nacos-client -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
写application.yml
spring:
application:
name: nacos-test
main:
web-application-type: reactive
cloud:
nacos:
discovery:
server-addr: localhost:8848
主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class PayApplication {
public static void main(String[] args) {
SpringApplication.run(PayApplication.class,args);
}
}
启动
服务已入驻
创建controller层
@RestController
public class PayController {
@Value("${server.port}")
private String serverPort;
@GetMapping("provider/test/a")
public String acc(){
return "abb"+serverPort;
}
}
同样的方法再创建一个调用上述服务的调用者,方法如上
故在此只强调此不同点
同样的引入依赖
这里比上面要多引入一个依赖,官网推荐时lobalancer加RestTemplate,你也可以Feign+RestTemplate
<!-- LoadBalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
写yml
server:
port: 9998
spring:
application:
name: nacos-consumer-test
main:
web-application-type: reactive
cloud:
nacos:
discovery:
server-addr: localhost:8848
provider:
url: http://nacos-test
注意这里的
provider:
url: http://nacos-test 是在nacos注册的被调用的服务
主启动类同上被调用者
注意这里的因为官方文档要我们调用者推荐使用RestTemplate+LoadBanance
所以我们需要配置RestTemplate
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
注意这里的@LoadBalanced必须加,不加后面无法访问被调用者,会报错
创建controller层
@RestController
public class ComsumController {
@Resource
private RestTemplate restTemplate;
@Value("${provider.url}")
private String URL;
@GetMapping("consumer/nacos")
public String abb() {
System.out.println("aaaaaaaaa");
String res = restTemplate.getForObject(URL + "/provider/test/a", String.class);
return res;
}
@GetMapping("consumer/a")
public String acc() {
System.out.println("aaaaaaaaa");
return "res";
}
}
访问端口http://localhost:9998/consumer/nacos
成功跳转
@GetMapping("provider/test/a")
public String acc(){
return "abb"+serverPort;
}
因为我们被调用者创建的方法是上述这样,所以访问跳转结果对上了。
在此说明不加loadbalanced注解的结果