2013-02-14 154 views
2

我正在阅读关于Tibco MoM的JMS主题订户(并已实施样例)。这些是我指的链接:Link1针对某个主题的多个持久订阅者的交易管理

但是,我不清楚交易将如何管理多个用户。 我使用DefaultMessageListenerContainer作为Container和持久订阅。

通常,当用户的onMessage完成时,交易将被提交。 How does it happen over multiple subscribers?

现在,假设Subscriber1收到消息并根据它处理一个动作(该动作不能颠倒)。稍后的Subscriber2还活着,试图处理这个消息。出错了,现在事务必须回滚 - 消息将被放回到主题中。

10接下来,Subscriber1会再次看到消息吗?它将不得不再次消费该消息吗?这是分布式事务的情况吗?什么时候发生?

回答

1

每个用户在自己的交易中收到其消息,并提供交易成功提交,单个用户将不会再看到该消息。在订户交易回滚时,该消息将仅被重新发送给发生故障的订户(假设代理不限制重新交付)。

+0

谢谢尼古拉斯。何时从主题中删除该消息?用什么机制来跟踪?通常在Queue中,只要消费者Listener提交'consume/onMessage'事务,消息就会被删除。 – 2013-02-14 13:32:26

+1

代理负责保留消息,直到消息发送到所有连接的非持久订阅者以及消息发布时订阅的所有持久订阅者。不同的实施方式在完成方式上有所不同,并且如果消息具有指定的生存时间,则代理可以在消息过期后丢弃该消息,而不管它是否已经被所有订户接收。 – Nicholas 2013-02-14 14:00:14