使用IBM WEBSHPERE MQ发送大的消息

使用IBM WEBSHPERE MQ发送大的消息

2007-11-15 创建

如果仅仅使用MQ队列管理器的缺省配置, MQ仅能发送3M-4M左右的消息(单条), 而很多情况下, 需要发送的消息长度超过了这个数量, 实现大消息的发送要解决三个方面的问题,

1, 日志文件

使用缺省配置创建的队列管理器有3个主日志文件, 2个辅日志文件, 每个文件256页, 每页4K, 因此最大的日志空间为 5 * 256 * 4K 大约5M, 因此该空间将单条消息的长度限制在
3-4M左右(去除一些管理开销). 如果需要发送长度大于这个限制的单条消息, 则必须扩展日志大小.

MQ规定主文件的数量为2-62个, 主文件和辅文件的总数在3到63之间.
如果需要发送单条在100M左右的消息, 可以创建1024个4K数据块的日志文件, 主文件为32个, 4个备份文件. 大约36 * 1024 * 4 = 144M

2, 队列管理器, 队列, 通道的最大消息配置
在应用程序不做改变的情况下, 队列管理器, 接收队列还有传输通道所允许的最大消息长度必须大于单条消息的长度, 我们在配置中进行相应的修改就可以了.

3, 发送和接收应用程序的消息发送和接收方法
实际上, 应用程序可以通过修改消息发送和接收的方式,在不改变配置的情况下发送超过最大消息长度的消息, 方法就是消息分块(SEGMENT)发送和接收.

在发送时,应用程序指定可以消息分快发送,MQ将自动把大消息切分为一段段消息片断,
 mqMsg.MessageFlags = MQC.MQMF_SEGMENTATION_ALLOWED;

然后在接收时, 同样指定分段数据的完整接收, 以便将消息重新组合.
        mqGetMsgOpts.Options |= MQC.MQGMO_WAIT + MQC.MQGMO_ALL_SEGMENTS_AVAILABLE;

使用消息分块的方式发送和接收消息,可以不关心队列管理器, 接收队列, 发送通道的最大消息长度设置. 如果系统中最大的消息长度大于100M以上, 例如发送大的视频文件等, 建议使用这种方式.
 

你可能感兴趣的:(IBM,扩展)