Nacos使用
上篇文章介绍了Nacos学习(二),进行Nacos安装,本章一起来使用,本文以整合springcloud为例。
项目依赖
方式一:自己手动依赖
版本关系请参考:版本关系说明
方式二:通过阿里云/spring官网生成(建议使用),地址如下
阿里云Java InitializrSpring Initializr
在本章节会做两个实例,一个producer,一个consumer
producer:
# 应用名称
spring:
application:
name: springcloud-alibaba-nacos-producer-demo
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: 192.168.43.60:8848,192.168.43.61:8848,192.168.43.62:8848
# 注册到 nacos 的指定 namespace,默认为 public
namespace: public
server:
port: 8080
@SpringBootApplication
//加上注解@EnableDiscoveryClient,允许服务发现
@EnableDiscoveryClient
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
//@LoadBalanced配置负载均衡
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
consumer:
# 应用名称
spring:
application:
name: springcloud-alibaba-nacos-consumer-demo
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: 192.168.43.60:8848,192.168.43.61:8848,192.168.43.62:8848
# 注册到 nacos 的指定 namespace,默认为 public
namespace: public
server:
port: 8081
@SpringBootApplication
//加上注解@EnableDiscoveryClient,允许服务发现
@EnableDiscoveryClient
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
//@LoadBalanced配置负载均衡
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
启动后,在nacos上显示如下:
基于restTemplate进行服务间调用
producer:
@RestController
@RequestMapping("/producer")
public class ProducerTestController {
@GetMapping("test")
public String test() {
return "producer test success!";
}
}
consumer:
@RestController
@RequestMapping("/consumer")
public class ConsumerTestController {
@Autowired
RestTemplate restTemplate;
@Autowired
LoadBalancerClient loadBalancerClient;
@GetMapping("test")
public String test() {
//获取实例
ServiceInstance serviceInstance = loadBalancerClient.choose("springcloud-alibaba-nacos-producer-demo");
//拼装路径
String url = "http://" + serviceInstance.getServiceId() + ":" + serviceInstance.getPort() + "/producer/test";
String result = restTemplate.getForObject(url, String.class);
return result;
}
}
很多同学会说,restTemplate这么麻烦,谁会用呀~~👎👎
稍安勿躁,稍安勿躁,接下来用dubbo、feign来解决你们的烦恼哈😁
基于dubbo进行服务间调用
创建一个api项目:springcloud-alibaba-nacos-producer-dobbo-api-demo
//服务端接口
public interface NacosProducerApi {
String test();
}
producer:
##dubbo配置文件
dubbo:
scan:
base-packages: com.example.sirngcloud.alibaba.demo.service
protocol:
name: dubbo
port: -1
registry:
address: spring-cloud://localhost
@DubboService//旧的@Service已经废弃掉
//服务端接口实现
public class NacosProducerApiImpl implements NacosProducerApi {
@Override
public String test() {
return "NacosProducerApiImpl";
}
}
consumer:
dubbo:
protocol:
name: dubbo
port: -1
registry:
address: spring-cloud://localhost
cloud:
subscribed-services: springcloud-alibaba-nacos-producer-demo # 生产者服务名,多个用逗号分隔
@DubboReference//旧的@Reference已经被废弃
private NacosProducerApi nacosProducerApi;
@GetMapping("dubboTest")
public String dubboTest() {
return nacosProducerApi.test();
}
基于feignClient进行服务间调用
加上@EnableFeignClients注解
在consumer中定义客户端feignClient:
@FeignClient(name = "springcloud-alibaba-nacos-producer-demo")
public interface ProducerFeignClient {
@GetMapping("/producer/test")
String test();
}
接口调用:
@Autowired
private ProducerFeignClient producerFeignClient;
@GetMapping("feignTest")
public String feignTest() {
return producerFeignClient.test();
}
以上就是nacos作为注册中心,服务间调用的demo,下面上来说一下nacos作为配置中心
nacos配置中心:
打开nacos控制面板,选择配置列表,点右侧加号进行添加配置。
配置完后,点击发布。
打开nacos server配置列表添加配置(data ID命名规则为:${prefix}-${spring.profile.active}.${file-extension})
- prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置。
- spring.profile.active 即为当前环境对应的 profile,可以通过配置项 spring.profile.active 来配置。
- file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
发布成功后在配置列表就能看到。
使用配置中心需要添加bootstrap.yml文件
# 应用名称
spring:
application:
name: springcloud-alibaba-nacos-producer-demo
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: 192.168.43.60:8848,192.168.43.61:8848,192.168.43.62:8848
# 注册到 nacos 的指定 namespace,默认为 public
namespace: public
config:
server-addr: 192.168.43.60:8848,192.168.43.61:8848,192.168.43.62:8848
# 缺省值是properties
file-extension: yml
# 缺省值
group: DEFAULT_GROUP
# 缺省值
prefix: ${spring.application.name}
配合@RefreshScope可以动态更新@Value("${xxx}")的字段
在nacos控制面板上修改属性内容,则可以动态改变。
修改前:
修改后:
总结
本章主要介绍nacos整合springcloud,展示了通过resttemplate、openfeign、dubbo进行服务间调用以及配置中心的使用,希望各位同学都多动手,多练练~😬😬
本文的例子都放到github上:https://github.com/EarthXuan/SpringCloudAlibabaDemo