Nacos学习三(整合springcloud注册中心&配置中心)

Nacos使用

上篇文章介绍了Nacos学习(二),进行Nacos安装,本章一起来使用,本文以整合springcloud为例。

项目依赖

方式一:自己手动依赖

版本关系请参考:版本关系说明

方式二:通过阿里云/spring官网生成(建议使用),地址如下

阿里云Java Initializr
Spring 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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值