繁体   English   中英

使用JAX-RPC时,如何将错误的请求放置在死信队列中?

[英]Way to place a bad request in a dead-letter queue when using JAX-RPC?

我正在使用JAX-RPC 1.1为在WAS 6.0上运行的一组应用程序生成服务,并通过Websphere MQ进行通信。 大型机将向服务发送消息,因此,如果由于某种原因而无法将消息转换为对象(可能是由于EBCDIC-to-ASCII怪异),则需要将消息放置在死信队列中进行检查。

有谁知道是否有标准的方法(例如,通过为jms:/地址提供DLQ名称),或者是否需要以某种方式手动执行DLQ转发?

首先,让我建议您不要为此依赖DLQ。 DLQ是QMgr级别的资源,用于存储通道无法解析的消息。 因为它是潜在的攻击媒介,所以大多数注重安全性的商店都不会授予对应用程序的访问权限,或者如果这样做,则仅授予访问权限。

最好的方法是创建特定于应用程序的异常队列。 如果该应用程序有多个输入队列,则它们都可以使用相同的异常队列,然后应用程序支持团队可以管理在此处存储的所有消息而不会出现安全问题。

无论采用哪种方式,让应用程序兑现这一点都非常容易。 例如,假设您的应用正在从JAX.SVC.REQUEST中读取。 您定义异常队列并将BOQ *字段指向它:

DEF QL(JAX.SVC.EXCEPTION)更改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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM