文章目录
IBM MQ 的JAVA使用案例
IBM MQ依赖
依赖:
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>9.2.3.0</version>
</dependency>
所测试的依赖类所在包:
import com.ibm.mq.*;
而不是:
import com.ibm.msg.client.wmq.compat.base.internal.*;
消息传输实例
目录
core:读取和初始化配置
event:消费接口
websphere:消息主体为String和Bytes的测试实例
测试/使用
修改mqconfig.properties配置后,可以不修改其他代码,直接跑websphere下的两组测试用例,创建默认队列管理器,可传输的文件大小最大为64M左右。
测试sender发送的图片源在resources/img下
测试receiver接收到的文件放在resources/img下
MQMessage
基本属性如下
MQMessage myMessage = new MQMessage();
myMessage.encoding = 546;//编码
myMessage.characterSet = 1381;//字符集
myMessage.expiry = -1; // 设置消息不过期,默认是-1
myMessage.format = MQC.MQFMT_STRING;//格式
encoding:
characterSet :消息为字符串时,需要设置,否则报错。
expiry:设置消息不过期,默认-1
format: 消息为字符串时,需要设置,否则报错。MQMD 格式字段。给出描述消息数据性质的内置格式名称或用户定义的格式名称。其初始值是特殊值 MQFMT_NONE。
消息类型write?()
消息主体包括多种类型,通过MQMessage::write?()方法指定
为消息设置属性set?Property()
如果消息主体为视频的时候,我们希望带上视频的文件名、封面图片、拍摄日期等属性,可以通过以下方式添加,并再接收者中接收,测试案例见demo。
//TODO 设置属性
myMessage.setStringProperty("name","hello.mp4");
byte[] image = ...
myMessage.setBytesProperty("image",data);
//TODO 接收属性
String name = myMessage.getStringProperty("name");
IBM服务器端设置消息大小限制
-
默认4M
-
最大消息传输大小在服务器端设置,可配置最大消息限制的有3个地方(如下),设置完以后,重启队列管理器。
1.队列管理器
2.队列
3.通道 -
在设置的时候,原则上以上三者最大消息大小限制的关系为: 队列管理器>=队列>=通道
注意:最大只能设置为100M(104857600) -
在Java中可以查询最大消息传输大小,经过测试,这里获得的是通道的最大长度。
//获取通道的最大消息限制
MQQueueManager::getMaximumMessageLength();
设置队列管理器消息大小限制
右键队列管理器,属性
设置队列消息大小限制
设置后可不重启
设置通道消息大小限制
2102报错
在传>64M左右的文件,Java控制台报错代码2102,大概原因:
查找了相关资料,创建队列管理器的时候使用了默认配置,导致单条消息大小限制为(2+3)40964kb = 80M,除去一些管理开销,大概在63M、64M上下。可以通过以下方式修改限制。修改完后重启队列管理器
参考:
https://blog.csdn.net/firefight/article/details/1886483
参考文档
https://www.ibm.com/docs/zh/ibm-mq/9.1