MQ-处理超过最大长度的消息将移至死队列

时间:2018-06-28 11:27:02

标签: ibm-mq

这是一个普遍的问题。我说我在本地有一个队列管理器。我有一个传输队列/远程队列定义设置,通过它我可以连接到目标队列管理器队列。如果目标队列管理器队列的最大消息长度容量为1000,并且如果我放置的消息长度超过该长度,则只要传输队列的最大消息长度大于我输入的长度,它就会自动移动到目标队列管理器死信队列。这是预期的行为。但是MQ世界上有什么方法可以处理这个问题,而不是将其移到死队列中吗?还是应用程序的唯一责任是使此消息不超过最大长度?

谢谢。

2 个答案:

答案 0 :(得分:0)

将默认的“最大邮件长度”(即MAXMSGL)从4MB更改为较小的值是一个坏主意。

神话:MQ不会根据最大消息长度字段中的值分配空间。将其设置为很小的值或很大的值不会影响磁盘空间。 MQ只写实际消息的大小/数量。

其次,应用程序团队应告诉MQAdmin,应用程序将发送的最大消息是什么。如果他们说10MB,则MQAdmin可以增加最大值。邮件长度为10MB或更大一点,即12MB。

可以使用的最大值是100MB。

注意:MQAdmin将需要增加最大值。消息长度:大于默认大小4MB的任何消息的通道,XMITQ,本地队列和死信队列的长度,否则它将不流通。

答案 1 :(得分:0)

感谢Roger和JoshMc。实际上,我尝试了两种选择,即质量管理的客户端以及质量管理和质量管理之间的客户端。 QM的客户端很好,因为客户端会收到错误代码,并且基本上什么也没有发生。但是仅在发送方QM和接收方QM之间存在问题。我主要看到的是,只有一个具有最大消息长度的传输队列可以连接到特定的队列管理器。所有不同的远程连接/队列都使用该传输队列。因此,如果发件人通过发送比目标队列无法接受的大消息来犯错,则通常会最终穿过传输队列,但在目标中失败并到达目标的死队列。现在,目标所有者将收到警报/或需要针对其未犯的错误进行补救。这就是我问这个问题的全部原因。非常感谢您为我们节省更多时间并为我花费时间。

我认为莫拉格·休森(Morag Hughson)为我提供了一些尝试的机会,但仍然会产生负面影响。但是我一直在寻找类似的东西,我们可以在MQ级别进行控制,以不允许消息进入目标死队列。