gpt4 book ai didi

java - 使用 JAX-RPC 时如何将错误请求放入死信队列?

转载 作者:行者123 更新时间:2023-11-30 01:39:10 27 4
gpt4 key购买 nike

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

有谁知道是否有标准方法可以做到这一点(即通过提供带有 DLQ 名称的 jms:/地址),或者是否需要以某种方式手动执行 DLQ 转发?

最佳答案

首先,我建议您不要依赖 DLQ 来实现此目的。 DLQ是QMgr级别的资源,用于存储 channel 无法解析的消息。因为它是一个潜在的攻击媒介,所以大多数具有安全意识的商店不会授予对应用程序的访问权限,或者即使他们这样做,也只是 put-only 访问权限。

执行此操作的最佳方法是创建特定于应用程序的异常队列。如果应用程序有多个输入队列,它们都可以使用相同的异常队列,然后应用程序支持团队可以管理到达那里的任何消息,而不会出现安全问题。

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

DEF QL(JAX.SVC.异常)更改 QL(JAX.SVC.REQUEST) BOQNAME(JAX.SVC.EXCEPTION) BOQTHRESH(5)

JMS 类将在队列打开时查询队列的 BOQ* 属性,并检查读取的每条消息的回退计数。在您的程序中使用事务处理 session ,如果您无法处理消息,请调用 session.backout() 方法。该消息将被读取和回退不超过 BOTHRESH 次,然后重新排队到 BOQNAME 中指定的队列。如果该队列已满或不可用,将尝试 DLQ。如果失败,类将抛出异常。

我们选择 BOTHRESH > 1,以允许在 QMgr 关闭等情况下撤回可处理消息的可能性。

我通常会触发异常队列,以便在有东西落在其中时它可以发出警报或发送电子邮件。如果您有监控工具,则可以检查深度 > 0。

如果由于某种原因您不想使用 JMS 功能自动重新排队消息,则应用程序将需要逻辑来重新排队消息。如果您要将消息放在 DLQ 上,您将需要在前面添加 DLQ header 。如果不这样做,可能会破坏 DLQ 处理程序或监视该队列的任何其他工具。

关于java - 使用 JAX-RPC 时如何将错误请求放入死信队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com