2017-06-15 38 views
0

我有一個基本設置,其中消費者正在傾聽項目的「/隊列/工作」。消費者一次只能消費一件物品。拒絕STOMP消息未通過RabbitMQ重新發送給客戶端

要做到這一點,我不應該同時收到任何其他物品,並且在物品正在處理時還從隊列中取消註銷。

如果我現在再次訂閱相同的隊列,NACKed郵件不會重新發送到客戶端 - 除非我放棄整個連接並重新連接會話 - 這不完全是我想要做的,因爲它也會影響其他訂閱:(

有沒有實現這個「拿一個項目 - 忽略而忙碌的」另一種方式?模式

回答

0

要回答我的問題 - 來實現它而不必NACK產生的再分發問題是使用交易和預取設置的組合信息的方式:

如果設置「預取數」 :STOMP頭中爲1 - 在發送下一個消息之前,服務器將只允許一個消息在信道上「正在運行」。這意味着客戶端必須在發送新消息之前確認/否定消息。

因此,只有當「作業」完成時才發送ACK,而是在我們收到消息時立即開始事務 - 立即確認消息 - 並在作業完成時提交事務。這種「失敗」的作業被正確地重新傳遞。

0

按照STOMP Protocol Spec,服務器不會重新傳遞NACK的消息給發送NACK客戶端

當您重新訂閱時,請嘗試使用不同的id未被其他訂戶使用的標頭值。

相關問題