一.Dubbo支持Apollo的介绍

Apollo是携程开源的一款配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

Dubbo目前的最新版本2.7.0将过去单一的注册中心拆分成了注册中心、元数据中心和配置中心。其中配置中心起到的作用之一,就是将配置外部化,也就是将配置从应用内部剥离出去,可以在一个地方统一管理配置,也可以在程序启动之后从配置中心修改配置,再动态刷新到应用(前提是应用自身支持在启动之后切换该配置)。

目前Dubbo已经支持Zookeeper、Nacos、Apollo作为配置中心。本文就将介绍将Apollo作为配置中心的使用方式。

二.Apollo的安装与使用。

本部分不赘述,请参考官方文档:https://github.com/ctripcorp/apollo/wiki/Apollo%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97

三.Apollo配置Dubbo属性:

打开本地安装的Apollo首页并登陆:

Dubbo使用Apollo作为配置中心实战

新建一个应用dubbo-demo-provider,

Dubbo使用Apollo作为配置中心实战

新建一个namespace,名为dubbo,目前dubbo默认支持的命名空间为dubbo。

Dubbo使用Apollo作为配置中心实战

注意不要勾选部门前缀,同时设置为public。当设置为private时,只有相同的app.id的应用才可以获取此配置。而public可以被所有应用获取。

添加两条配置:

Dubbo使用Apollo作为配置中心实战

添加属性之后,点击“发布”。

四.Dubbo应用搭建

1.下载Dubbo 2.7.0的源码。Dubbo源码中自带了一个demo模块,可以直接运行。本文就通过修改它的配置,来使用Apollo配置中心。

2.打开dubbo-demo-xml-provider模块下的dubbo-provider.xml配置文件,注释掉

<dubbo:registry address="multicast://224.5.6.7:1234" />

添加下面的配置:

<dubbo:config-center app-name="dubbo-demo-provider" protocol="apollo" address="127.0.0.1:8080"/>

3.打开dubbo-demo-xml-consumer作同样的配置。

4.demo代码讲解:

首先是定义了一个接口:

public interface DemoService {

    String sayHello(String name);

}

在provider端实现这一接口:

public class DemoServiceImpl implements DemoService {
    private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);

    @Override
    public String sayHello(String name) {
        logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();
    }

}

服务端启动类:

public class Application {
    /**
     * In order to make sure multicast registry works, need to specify '-Djava.net.preferIPv4Stack=true' before
     * launch the application
     */
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-provider.xml");
        context.start();
        System.in.read();
    }
}

消费者启动类:

public class Application {
    /**
     * In order to make sure multicast registry works, need to specify '-Djava.net.preferIPv4Stack=true' before
     * launch the application
     */
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-consumer.xml");
        context.start();
        DemoService demoService = context.getBean("demoService", DemoService.class);
        String hello = demoService.sayHello("world");
        System.out.println("result: " + hello);
    }
}

五.下载zookeeper并启动

因为demo中需要使用zookeeper作为注册中心,所以需下载zookeeper并启动。具体方式请自行搜索。

六.启动应用

首先启动provider,输出日志:

Dubbo使用Apollo作为配置中心实战

可以看到,因为没有设置app.id,所以只能读取public的配置

再启动consumer,启动日志:

Dubbo使用Apollo作为配置中心实战

说明consumer调用provider成功

七.总结

Dubbo目前对支持Apollo作为配置中心做了一个初步的实现,目前所有的配置都是放到一个key下面(即value的一行是一个dubbo自身的配置)dubbo拿到这个配置后,自己解析为自身的多个配置。后续可能会修改为支持apollo上有多个key。

通过引入配置中心,可以在应用中减少配置,将配置放到配置中心统一管理。并且配置中心可以在不重启应用的情况下修改配置并推送给应用。当然前提是应用的配置本身支持在启动后改变并生效(某些配置可能在启动时生效,但启动后不能修改)。

相关文章:

  • 2022-12-23
  • 2022-01-02
  • 2021-06-07
  • 2022-12-23
  • 2021-08-19
  • 2021-07-11
  • 2021-12-22
  • 2022-01-05
猜你喜欢
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2021-05-22
  • 2022-02-17
相关资源
相似解决方案