1

我目前正在使用 glassfish 的默认代理处理 jms 消息。示例我有一个 queueA。

queueA,将收到 2 种类型的响应:

1.) 正常响应 - 意味着服务立即回复,没有任何问题,

2.) 过期响应 - 2 天后服务回复。

在 queueA 上,我有一个 jms 接收器,它在 5 分钟后超时,所以在那之后没有人会收到消息,它会在 30 秒后超时。问题是,当这个事件发生时我可以抛出一个事件,以便我可以处理延迟的响应吗?

谢谢,
czetsuya

4

1 回答 1

0

不幸的是,我发现当这个事件发生时,glassfish 不会抛出任何消息过期操作。我的解决方法是使用 2 个同步和异步队列,它们将被同步读取,如果消息已经消失,则写入异步队列。

SenderA 写入 AsynchronousQueueA SenderA 开始读取 SynchronousQueueResponseS(持续 n 秒) ReceiverA 从 SenderA 接收消息到 AsynchronousQueueA ReceiverA 如果失败则向 SynchronousQueueResponseS 写入回复,然后向 AsynchronousQueueResponseA 写入回复。

请注意,监听 SynchronousQueueResponseS 的线程将在 n 秒后过期,如果过期,回复将被写入 AsynchronousQueueResponseA。这是队列过期事件侦听器的解决方案。

于 2012-08-22T05:33:34.157 回答