2010-01-01 21 views
1

假設我從多個節點的隊列中加載消息。做消息隊列提供事務支持?

然後,一個或多個節點從隊列中提取消息。

是否有可能(或者這是正常的用法?)隊列保證不將消息分發到多個服務器/節點?

那麼服務器/節點是否必須告訴隊列已完成操作和隊列並刪除消息?

+1

以上所有答案都是「是」。如果你需要更具體的答案,你能問一個更具體的問題嗎? – skaffman 2010-01-01 15:04:21

回答

2

不保證將給定消息分發給一個收件人的消息排隊系統將不值得使用。一些消息隊列系統具有事務控制。在這種情況下,如果一個接收者收到一條消息作爲事務的一部分,但是接收者沒有提交事務(並且消息隊列可以識別原始接收者不再可用),那麼它將被重新發布。但是,該消息不會同時用於兩個進程。

2

您使用的是哪種消息傳遞/排隊技術? AMQP當然可以保證這種行爲(其中包括酒吧/子機型)

0

如果你想在Java中使用它 - 那麼符合JMS的消息傳遞系統就可以做你想做的事 - 而且大多數消息傳遞系統都有一個JMS客戶端。您也可以使用Spring的JmsTemplate,以實現真正的易用性。

使用JMS--來自隊列的消息只會被一個客戶端消費 - 只要消費(確認),消息就會從消息系統中刪除。另外,當您使用JMS發佈消息時(如果它的持久性),它將同步發送,send()方法將不會返回,直到消息存儲在代理的磁盤上 - 這很重要 - 如果您不想如果發生故障,可能會丟失信息。