我正試圖讓自己的頭腦解決最近遇到的問題,並希望有人能夠指出我解決問題的最合理的方向。處理rabbitmq消息處理中的時鐘的最佳方法
我使用了Riak KV存儲和上CRDT數據,在那裏我有某種存儲在數據庫中的每個項目CRDT櫃檯內工作。
我有一個rabbitmq隊列,其中每條消息是增加或減少一定數量的上述計數器的請求。
最後,我有一組服務工的,即在隊列監聽,並且對於每個請求嘗試相應地改變計數器的量。
我的問題是如下:當一個工人正在處理請求時,它可能會卡上的寫操作數據庫一段時間 - 讓我們在櫃檯第二次更換了三次的說。它與rabbitmq的連接會丟失(超時),因此消息請求會回到隊列中(我不能錯過)。然後由第二名工作人員拾起,重新開始所有處理。但是,第一名工作人員完成了工作,並且作爲結果,我已經處理了一條消息兩次。
我可以將這些增量分成單獨的行動,但仍給我留下了困境 - 仍然可以改變計數器的值的兩倍,如果一些員工卡上的寫操作很長一段時間。
我沒有做了Riak KV CRDT的可能性寫入工作得更快,我也可以接受錯過了一個消息請求。我需要實現一些檢查請求是否已經處理過的方法。 我最初的想法是使用一些替代的快速KV商店來存儲rabbitMQ消息ID(如果正在處理它們)。這樣,其他工作人員就可以判斷他們是否開始處理已在別處解析過的消息。 我可以使用任何幫助和指向我可以閱讀的材料的指針。