2012-11-26 82 views
1

我有一段時間以來一直在使用的RabbitMQ鏟。RabbitMQ鏟凍結'運行'

我有一臺電腦'192.168.7.1',鏟取來自另一臺電腦'192.168.7.6'的消息。除非'192.168.7.6'重新啓動,否則這將起作用,然後'192.168.7.1'上的鏟保持在RUNNING狀態,永遠不會再接收消息,也不會重新連接。所以消息無限期地緩存在'192.168.7.6'上。

下面是從我的配置文件示出了鏟配置的摘錄:

[{rabbit, [{disk_free_limit, {mem_relative, 1.0}}]}, 
{rabbitmq_shovel, 
    [ {shovels, [ {backbone_shovel, 
        [ {sources, 
         [ {brokers, [ "amqp://guest:[email protected]" 
            ]} 
         , {queue.declare, [ 
           {queue, <<"backbone">>} 
           , durable 
           ]} 
         ]} 
        , {destinations, 
         [ {broker, "amqp://guest:[email protected]"} 
         , {queue.declare, [ 
           {queue, <<"backbone">>} 
           , durable 
           ]} 
         ]} 
        , {queue, <<"backbone">>} 
        , {ack_mode, on_confirm}      
        , {reconnect_delay, 5} 
        ]}, 

這裏從RabbitMQ的鏟管理插件的摘錄當源(192.168.7.6)正在重新啓動:

backbone_shovel 
running 
type: network 
virtual_host: /
host: 192.168.7.6 
username: guest 
ssl: false 
type: network 
virtual_host: /
host: localhost 
username: guest 
ssl: false 
2012-11-26 11:03:51 

當目標死亡時,我該如何強制鏟子重新啓動?

+0

你運行的是什麼版本的RabbitMQ? – kzhen

回答

0

回答我自己的問題,以防其他人有同樣的問題。

這個簡單的解決方案是把鏟子放在客戶端(PC'192.168.7.6')而不是服務器(PC'192.168.7.1')。然後,如果客戶端重新啓動,鏟子重新啓動。所以鐵鍬永遠不會與客戶的狀態不同步。

+0

我們使用QDB緩衝並從客戶端機器向RabbitMQ發送消息,而不是鏟子。節省必須在客戶端上運行Rabbit +更簡單的配置+如果處理失敗重播。 Http://qdb.io/ –