我目前正在使用 glassfish 的默认代理处理 jms 消息。示例我有一个 queueA。
queueA,将收到 2 种类型的响应:
1.) 正常响应 - 意味着服务立即回复,没有任何问题,
2.) 过期响应 - 2 天后服务回复。
在 queueA 上,我有一个 jms 接收器,它在 5 分钟后超时,所以在那之后没有人会收到消息,它会在 30 秒后超时。问题是,当这个事件发生时我可以抛出一个事件,以便我可以处理延迟的响应吗?
谢谢,
czetsuya
不幸的是,我发现当这个事件发生时,glassfish 不会抛出任何消息过期操作。我的解决方法是使用 2 个同步和异步队列,它们将被同步读取,如果消息已经消失,则写入异步队列。
SenderA 写入 AsynchronousQueueA SenderA 开始读取 SynchronousQueueResponseS(持续 n 秒) ReceiverA 从 SenderA 接收消息到 AsynchronousQueueA ReceiverA 如果失败则向 SynchronousQueueResponseS 写入回复,然后向 AsynchronousQueueResponseA 写入回复。
请注意,监听 SynchronousQueueResponseS 的线程将在 n 秒后过期,如果过期,回复将被写入 AsynchronousQueueResponseA。这是队列过期事件侦听器的解决方案。