2010-10-21 70 views
0

我正在为ebXML消息传递应用程序编写消息处理程序。该消息遵循请求 - 响应模式。该过程非常简单:发件人发送消息,收件人收到消息并发送回应。到现在为止还挺好。具有响应时间限制的异步请求 - 响应算法

接收到一条消息后,接收方有一个设置的消息响应时间(TTR)。这可能是从几秒到几小时/天的任何地方。

我的问题是这样的:发件人应该如何处理TTR?我需要这是一个异步过程,因为TTR可能会很长(几天)。我怎样才能以某种方式倒计时器,但不会占用很长一段时间的系统资源。可能会有大量的消息。

我最初的想法是有一个“等待”收集,添加消息ID,以及其TTR到期时间。然后我会定期轮询收集。当计时器到期时,消息Id将被移动到“Expired”集合,并且消息事务将被终止。

当发件人收到回复时,它可以检查“正在等待”收集其匹配的已发送消息,并确认及时收到回复。然后该消息将从集合中移除以用于下一个处理阶段。

这听起来像一个强大的解决方案。我确信这是一个解决的问题,但有关这类算法的信息很少。我打算用C#实现它,但在我认为的这个阶段,实现语言是无关紧要的。

感谢您的输入

回答

1

根据客户端的数量,您可以使用持久性JMS队列。每个客户端ID有一个队列。该消息将保留在队列中,直到客户端连接到它以检索它。

我不理解TTR的目的。如果在一定的时间内回复无法返回,那么请不要打扰发送呢?或者是在服务器上使用它来安排工作并做现在所需的工作,然后用稍后的响应时间推迟请求?

这是一个广泛的问题...