gpt4 book ai didi

java - JMS 超时或 TimeToLive

转载 作者:行者123 更新时间:2023-11-30 11:51:21 28 4
gpt4 key购买 nike

我是 Java EE 和 JMS 的新手,正在考虑使用 JMS 进行实现。

考虑以下场景:

场景

用户点击一个 servlet。然后从该 servlet 将消息放入 JMS 服务器/队列。然后将响应发送回用户,说“消息已排队”。

选项 1

消费者/MDB 从 JMS 队列接收消息并处理它。这是正常操作,非常标准。

选项 2

没有消费者(无论出于何种原因)或接收者处理消息的速度太慢。所以我想要的是队列中的消息超时。一旦超时,应发送电子邮件等(电子邮件仅作为示例)。

阅读我在 QueuSender 类中找到的 API 规范/Java EE 6 教程

void send(Message message, int deliveryMode, int priority, long timeToLive) 

因此,通过设置 timeToLive,消息将从队列中逐出。问题是没有“接口(interface)/回调”来知道消息已被驱逐。它就这样消失了。还是我弄错了?

我想到的另一种方法是让线程监视队列并逐出“过期”的消息并将它们从队列中拉出。但我不认为这是可能的,是吗?

任何关于此事的线索都将不胜感激。

最佳答案

您必须使用一些特定于实现的功能来满足您的要求。 JMS 规范既没有定义对超时消息执行的操作,也没有在轮询队列中的消息时为您提供任何合理的标准选择。

大多数(如果不是全部)JMS 实现都提供 DLQ(死信队列)的概念。如果消息无法传递给常规消费者或超时,JMS 实现很可能能够将消息移动到 DLQ,DLQ 基本上也是一个具有自己的监听器的常规队列。

因此,如果您设置两个队列,Q1 和 Q2,并将 Q2 配置为 Q1 的 DLQ,您将在 Q1 的监听器中执行正常的请求处理,并为 Q2 实现一个额外的监听器来执行错误/超时处理.

关于java - JMS 超时或 TimeToLive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7526367/

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