依赖:
<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 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。
消息主体包括多种类型,通过MQMessage::write?()方法指定

如果消息主体为视频的时候,我们希望带上视频的文件名、封面图片、拍摄日期等属性,可以通过以下方式添加,并再接收者中接收,测试案例见demo。
//TODO 设置属性
myMessage.setStringProperty("name","hello.mp4");
byte[] image = ...
myMessage.setBytesProperty("image",data);
//TODO 接收属性
String name = myMessage.getStringProperty("name");

默认4M
最大消息传输大小在服务器端设置,可配置最大消息限制的有3个地方(如下),设置完以后,重启队列管理器。
1.队列管理器
2.队列
3.通道
在设置的时候,原则上以上三者最大消息大小限制的关系为: 队列管理器>=队列>=通道
注意:最大只能设置为100M(104857600)
在Java中可以查询最大消息传输大小,经过测试,这里获得的是通道的最大长度。
//获取通道的最大消息限制
MQQueueManager::getMaximumMessageLength();
右键队列管理器,属性

设置后可不重启


在传>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