我使用JAX-RPC 1.1为一组上运行的应用程序生成服务WAS 6.0,通过WebSphere MQ通信。当一台主机会发送消息到服务,因此,如果由于某种原因,消息不能被转换为对象(可能是由于EBCDIC到ASCII怪事),需要放置在检查死信队列中的消息

有谁知道是否有这样做的标准方式(即通过提供JMS:与DLQ名称/地址),或者如果DLQ-转发将需要手动执行莫名其妙

有帮助吗?

解决方案

首先,我建议你不要依赖DLQ这一点。该DLQ是用于存储信道无法解析消息的QMGR级资源。因为它是一个潜在的攻击向量,最有安全意识的商店将不授予访问应用程序,或者如果他们这样做是放进行只读访问。

要做到这一点,最好的方法是创建一个应用程序特定的异常队列。如果应用程序有几个输入队列,它们都可以使用相同的异常队列,然后该应用支持团队能够管理土地不存在安全问题的任何消息。

你去哪种方式,让应用程序兑现,这是非常容易的。例如,假设您的应用程序从JAX.SVC.REQUEST阅读。可以定义例外队列和指向量清单*在它的字段:

DEF QL(JAX.SVC.EXCEPTION) ALTER QL(JAX.SVC.REQUEST)BOQNAME(JAX.SVC.EXCEPTION)BOQTHRESH(5)

它打开时,JMS类将询问在BOQ *队列的属性,并检查读取每个消息的恢复计数。在你的程序中使用事务处理会话,如果你不能处理的消息,调用session.backout()方法。该消息将被读取并回退不超过BOTHRESH次,然后重新排队到BOQNAME命名队列。如果队列已满或不可用的DLQ将受到审判。如果失败,则类将抛出异常。

我们挑选一个BOTHRESH> 1,以允许该可处理的消息将被回退,如果,例如,该QMGR被关闭的可能性。

我通常引发异常队列,以便它可以发出警报或者如果事情在它的土地发送电子邮件。如果你有一个监控工具可以检查深度> 0代替。

如果由于某种原因哟不想使用JMS功能来自动重新排队的消息,应用程序将需要逻辑来重新排队了。如果您是放置消息在DLQ你将要在前面加上DLQ头。如果不这样做可能会破坏DLQ处理器或任何其它仪器看该队列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top