JMS实现参数的集中式管理【面试+工作】

前言

JMS的发布订阅机制也能实现类似的功能,集群节点通过订阅指定的节点,同时使用jms对消息的过滤器功能,实现对指定参数的更新,本文将介绍通过JMS实现简单的参数集中式管理。

Maven引入

Spring相关的jar引入

目标

1.可以同时配置监听多个节点如/app1,/app2;

2.希望只需要配置如/app1,就能够监听其子节点如/app1/modual1以及子节点的子节点如/app1/modual1/xxx/…;

3.服务器启动能获取当前指定父节点下的所有子节点数据;

4.在添加节点或者在更新节点数据的时候能够动态通知,这样代码中就能够实时获取最新的数据;

5.spring配置中可以从Zookeeper中读取参数进行初始化。

虽然在实现的方式上有点区别,但是最终达成的目标是一致的,同样列出了这5条目标

实现

MQWatcher主要用来和JMS建立连接,同时订阅指定节点,建立点对点连接,过滤出需要监听的数据,更新数据,初始化数据,存储数据等

InitConfServer主要作为点对点连接的服务器端用来初始化数据

1.同时配置监听多个节点

提供一个字符串数组给用户用来添加需要监听的节点:

2.能够监听其子节点以及子节点的子节点

使用了一种和Zookeeper不一样的方式,JMS的方式是将所有的数据变更都发送到订阅者,然后订阅者通过过滤出需要的数据进行更新

对TOPIC进行了订阅,并且指定了过滤器keyFilter,keyFilter正是基于keyPatterns组装而成的

对指定的属性IDENTIFIER,通过LIKE和OR关键字进行过滤

3.服务器启动初始化节点数据

通过点对点的方式,在服务器启动时通过请求响应模式来获取初始化数据

通过对指定QUEUE请求,同时建立一个临时的响应QUEUE,然后接受一个MapMessage,用来初始化keyValueMap

4.监听节点数据的变更

通过发布订阅模式,接受所有数据,然后进行过滤,目标2中已经有相关实现

5.spring配置中可以从Zookeeper中读取参数进行初始化

通过以上的处理,可以使用如下简单的配置来达到目标:

测试

1.启动ActiveMQ

2.InitConfServer启动

用来监听集群节点的初始化请求,获取到集群节点发送来的keyPatterns,然后将符合其模式的数据封装成MapMessage发送给集群节点

以上代码只是进行了简单的模拟,提供了一个思路

3.启动Main类

4.启动TopicPublisher

定时发布数据,同时查看集群节点的Main类日志输出

日志输出如下:

详细代码svn地址:http://code.taobao.org/svn/temp-pj/DynamicConf

总结

通过JMS实现了一个简单的参数化平台系统,当然想在生产中使用还有很多需要优化的地方,本文在于提供一个思路;后续有时间准备对DynamicConf提供更加完善的方案。

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2018-10-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

linux基本命令学习01

============================================================================= Un...

1401
来自专栏游戏杂谈

Linux的scp命令

linux下的scp命令,用于双台linux服务器之间互拷文件(本机到远程或远程到本机)。

3412
来自专栏数据和云

MySQL连接错误的十二“坑”

环境准备 自建MySQL环境主机 主机:iZbp1e*****krn92qrx0Z 内网ip: 10.26.254.217 客户端ecs主机 主机:iZbp1e...

5599
来自专栏前端大白专栏

关于roadhogrc 新版本问题

1525
来自专栏猿说1024

JDK 安装

2106
来自专栏优启梦

文章内的新浪短网址https无法访问解决办法!

大家都知道最近新浪短网址出问题了! 以前蓝奏云、文章分享出来的地址都是https://t.cn的 导致丢失好多量! 一个一个修改太麻烦了,我们只能暂时将 htt...

4407
来自专栏别先生

'mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

1、C:\Users\Aiyufei>mysql -h 127.0.0.1 -u root 'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。...

8383
来自专栏lgp20151222

SVN错误:SVN Working copy XXX is too old

这是因为使用了低版本的svn生成了.svn内文件内容,但是,使用高版本svn同步时便出现该问题。

1681
来自专栏云计算教程系列

如何在Ubuntu 18.04上配置Node.js生产环境应用

Node.js是一个开源JavaScript运行环境,用于构建服务器端和网络应用程序。该平台可在Linux,macOS,FreeBSD和Windows上运行。虽...

1603
来自专栏xingoo, 一个梦想做发明家的程序员

汇编语言 手记6

DEBUG使用技巧 在windows系统下,可以在运行中键入cmd,然后输入debug就可以进入了。 相关命令: R 查看改变CPU寄存器的内容 D 查看内存中...

2017

扫码关注云+社区

领取腾讯云代金券