MQ消息中间件,苍穹中的简单使用原创
金蝶云社区-吴锐雄
吴锐雄
10人赞赏了该文章 3,130次浏览 未经作者许可,禁止转载编辑于2023年09月21日 18:56:21
summary-icon摘要由AI智能服务提供

本文介绍了在苍穹平台下使用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。

image.png


苍穹平台,使用linux版本,版本号是:4.0

image.png


linux版本的苍穹自带了rabbitMQ,redis,zk等等组件,安装目录的common目录下面

image.png


查看到本地的rabbitMQ服务状态:

image.png


浏览器中,访问 ip:15672 ,可以进入rabbitMQ的管理台。

image.png


使用步骤详情:

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接口image.png


在main目录下,创建resources目录,再创建子目录queue。

新增一个.xml文件,然后把刚刚创建的消费者在这里面注册。

如下图,新增了一个wrxmqconfig.xml文件

image.png


3.在MC的公共参数添加值,值是 mq的xml配置文件

公共配置方案,右上角搜索:mqConfigFiles.config

在值的那一栏,添加第2步骤配置的xml文件,如果有多个xml文件,换行。

如下图,由于之前已经有一个xml文件了,所以换行,然后添加文件。

image.png


添加完成之后,点击保存

image.png


然后,还需要发布集群

image.png


4.编写插件,插件中构造生产者,发送消息

在一个动态表单页面增加一个按钮

image.png

在插件中监听点击事件,点击时,发送MQ消息

image.png


效果

点击按钮

image.png

消费者接收到消息之后,把消息打印出来

后台打印日志如下图:

image.png


查看rabbitMQ的控制台,在queues页签上搜索,也看到队列已经注册进去了

image.png


异常场景

(1)mq队列注册失败

最近使用了苍穹开发者助手,把原项目的代码迁移到了苍穹开发者助手的工程下,发现mq总是注册不上去。

分析了一下,发现是resources目录没有设置为资源目录。

原项目结构如下

image.png


解决方案

右键,open module settings

image.png


将resources设置为Resources资源目录

image.png


设置之后,resources的目录会发生一点改变,这样项目就能识别到resources目录下面的xml等文件了。

image.png


(2)gpaas,容器分应用部署环境,mq队列没有注册成功

与第(1)点一样,都是队列没有注册上去,但这是不同原因造成的。

最近与客户一起分析了他的新环境上的mq队列一直没有注册成功的问题。


原因

分应用部署模式下,当前服务节点的appids中如果包含队列信息中配置的appid才可以消费该队列的消息。


解决方案:

因此需要在cosmic-bos的appids配置项下面,将我们mq中的appid值增加到该配置项中。


参考文章:

https://vip.kingdee.com/article/201334587116071424?productLineId=29





图标赞 10
10人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!