Spring Cloud Alibaba分布式配置中心Nacos Config

先回顾一下Spring Cloud

在学习Spring Cloud的时候相信大家都使用过Eureka和Config

  • Eureka:注册中心
  • Config:配置中心
  • 使用Eureka和Config时需要自己搭建一个服务而且这两者的英文界面不是很友好,无论是Eureka和Config都需要自己搭建一台服务,配置比较繁琐
  • 以上两大组件可能随时会面临停更的问题,比如Eureka已经停更了谁知道后面的组件会不会如此呢?

使用Spring Cloud Alibaba中的Nacos

用过Nacos的都说Nacos爽,使用Nacos时不需要自己搭建服务,因为阿里已经提供好了服务,只要启动即可
Nacos相当于Spring Cloud中的服务注册Eureka、消息总线Spring Bus、配置中心Config三大组件

使用Docker快速安装Nacos

docker pull nacos/nacos-serve
# 单机版部署
docker run -d -p 8848:8848 -e MODE=standalone -e NACOS_SERVER_IP=服务地址 nacos/nacos-server

Nacos默认的端口号是8848
在浏览器输入:http://ip地址:8848/nacos/就可以访问nacos了
在这里插入图片描述

分布式配置中心

在Spring Cloud中我们需要在git上先拉取配置,然后配置中心客户端在配置中心服务端上拉取配置,要实现数据动态刷新还需要使用Spring Bus以及RabbitMQ过程可是相当繁琐
在Nacos中使用分布式配置中心过程就会简单需要新增命名空间默认为public下,根据需要添加分组

  1. namespace相当于开发环境
  2. group相当于项目
  3. Data Id相当于工程

在这里插入图片描述
应用和配置中心的数据同步有以下三种模式:pull、push、混合模式
应用在配置中心上拉取配置,在配置中心上数据发生更改后,主动推送配置数据到指定的应用中

需要在引用配置文件的类上方添加@RefreshScope注解

代码示例如下:

这里使用的是Dubbo服务进行远程调用,我们将Dubbo的配置文件放到配置中心上进行集中化管理

生产者yml文件

需要指定Nacos服务地址,命名空间默认为public,组名默认为DEFAULT_GROUP,前缀,默认为${spring.application.name},环境名有环境名添加环境名,后缀名yaml也就是yml
读取配置中心上文件的读取规则:
p r e f i x − {prefix}- prefix{spring.profiles.active}-${file-extension}
分别对应的是应用名–环境名–文件后缀名
当active为空时对应的是:

p r e f i x − {prefix}- prefix{file-extension}

spring:
  application:
    name: dubbo-provider
  main:
    allow-bean-definition-overriding: true
    allow-circular-references: true
  cloud:
    nacos:
      config:
        server-addr: 192.168.66.121:8848
        namespace: 2135aba9-1d1d-4477-b7bc-ca0a7c45ed58
        group: DEFAULT_GROUP
        prefix: ${spring.application.name}
        file-extension: yaml
  profiles:
    active: dev

注意事项:以application命名的配置文件优先级比较低并不能直接在配置中心上拉取配置,还可能会出现项目启动不了的情况。我们应该使用比application的优先级更高的配置文件也就是bootstrap但是在Spring Cloud中要想使用bootstrap就要引入spring-cloud-starter-bootstrap起步依赖
在Spring2.0之后可能出现包重复引用的问题,出现这个bug不要慌,添加allow-bean-definition-overriding: true allow-circular-references: true就可以解决
请添加图片描述

生产者提供服务:
@DubboService(timeout = 5000,
methods = {@Method(name = "index",retries = 2)},
cluster = "failfast")
public class PaymentServiceImpl implements IPaymentService {
    @Override
    public String index() {
        return "支付成功";
    }
}
消费者yml文件:
spring:
  application:
    name: dubbo-consumer-order
  main:
    allow-bean-definition-overriding: true
    allow-circular-references: true
  cloud:
    nacos:
      config:
        server-addr: 192.168.66.121:8848
        namespace: 2135aba9-1d1d-4477-b7bc-ca0a7c45ed58
        group: DEFAULT_GROUP
        prefix: ${spring.application.name}
        file-extension: yaml
  profiles:
    active: dev

编写控制器进行远程调用:

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/index")
    public String index(){
        String order = orderService.order();
        return order;
    }

}

出现该字样说明分布式配置中心环境搭建成功

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿晓晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值