本文介绍了在苍穹平台下使用RabbitMQ消息中间件的开发环境和步骤,包括配置DebugServer、继承消费者接口、创建MQ配置文件、添加公共参数、编写插件发送消息等。同时,文章还提及了在使用过程中遇到的异常场景及解决方案,如resources目录未设置为资源目录导致MQ注册失败,以及分应用部署环境下MQ队列未注册成功的问题。
创作不易,如果文章对您有帮助,请为我点击一个朴实无华的赞^_^
根据苍穹官方给出的文档,目前苍穹支持的消息中间件有RabbitMQ
我在使用MQ的过程中做一些总结,写成文章。
开发环境使用步骤:
使用前需要准备好RabbitMQ,确保RabbitMQ是正常运行的。
1.在DebugServer.java里面配置一些参数
2.继承消费者接口,创建mq的xml配置文件
3.在MC的公共参数添加值,值是 mq的xml配置文件
4.编写插件,插件中构造生产者,发送消息
准备工作:
在苍穹里面使用MQ之前要先部署MQ服务。
如果是轻量级环境,MQ是使用内存模拟出来的,没有部署也没有关系依旧能使用。
我的开发环境是采用团队协同模式开发的,centos版本是7.5。
苍穹平台,使用linux版本,版本号是:4.0
linux版本的苍穹自带了rabbitMQ,redis,zk等等组件,安装目录的common目录下面
查看到本地的rabbitMQ服务状态:
浏览器中,访问 ip:15672 ,可以进入rabbitMQ的管理台。
使用步骤详情:
1.DebugServer配置参数
DebugServer.java:
配置本节点进行消费者注册,设置为true之后本节点就能接收到MQ消息了
System.setProperty("mq.consumer.register", "true");
因为我是使用协同开发模式的,当前环境的MC上连接了多台苍穹服务(cosmic),而现在是处于开发环节,我本机上的苍穹服务注册的MQ消费者还处于开发阶段,还没有同步到其他苍穹服务上.
所以必须要保证自己发送的message被自己java进程消费到。
配置本节点消息中间件的tag,必须保证后面的值是在所有的cosmic中唯一的。
配置了之后就可以确保本机发送的MQ消息被本机上的java进程消费到。
System.setProperty("mq.debug.queue.tag", "wrxtest");
配置连接rabbitMQ的 host,端口,用户名,密码。
用户名密码是在安装苍穹时配置的,也可以用rabbitMQ的管理工具或者命令行添加用户。
user是用户名,password是密码。host是MQ中间件的部署机器ip,5672端口是默认端口号,type是固定值填rabbitmq。
StringBuffer mqInfo = new StringBuffer(); mqInfo.append("type=rabbitmq").append(System.getProperty("line.separator")) .append("host=你部署MQ的ip地址").append(System.getProperty("line.separator")) .append("port=").append("5672").append(System.getProperty("line.separator")) .append("user=用户名").append(System.getProperty("line.separator")) .append("password=密码").append(System.getProperty("line.separator")) .append("vhost=my_cosmic"); System.setProperty("mq.server", mqInfo.toString());
2.继承消费者接口,创建mq的xml配置文件
继承MessageConsumer接口,编写一个MQ的消费者
如下图,新建一个WrxConsumer的类,并实例化了MessageConsumer接口
在main目录下,创建resources目录,再创建子目录queue。
新增一个.xml文件,然后把刚刚创建的消费者在这里面注册。
如下图,新增了一个wrxmqconfig.xml文件
3.在MC的公共参数添加值,值是 mq的xml配置文件
公共配置方案,右上角搜索:mqConfigFiles.config
在值的那一栏,添加第2步骤配置的xml文件,如果有多个xml文件,换行。
如下图,由于之前已经有一个xml文件了,所以换行,然后添加文件。
添加完成之后,点击保存
然后,还需要发布集群
4.编写插件,插件中构造生产者,发送消息
在一个动态表单页面增加一个按钮
在插件中监听点击事件,点击时,发送MQ消息
效果
点击按钮
消费者接收到消息之后,把消息打印出来
后台打印日志如下图:
查看rabbitMQ的控制台,在queues页签上搜索,也看到队列已经注册进去了
异常场景
(1)mq队列注册失败
最近使用了苍穹开发者助手,把原项目的代码迁移到了苍穹开发者助手的工程下,发现mq总是注册不上去。
分析了一下,发现是resources目录没有设置为资源目录。
原项目结构如下
解决方案
右键,open module settings
将resources设置为Resources资源目录
设置之后,resources的目录会发生一点改变,这样项目就能识别到resources目录下面的xml等文件了。
(2)gpaas,容器分应用部署环境,mq队列没有注册成功
与第(1)点一样,都是队列没有注册上去,但这是不同原因造成的。
最近与客户一起分析了他的新环境上的mq队列一直没有注册成功的问题。
原因
分应用部署模式下,当前服务节点的appids中如果包含队列信息中配置的appid才可以消费该队列的消息。
解决方案:
因此需要在cosmic-bos的appids配置项下面,将我们mq中的appid值增加到该配置项中。
参考文章:
https://vip.kingdee.com/article/201334587116071424?productLineId=29
推荐阅读