我有一個大型Python庫,各種進程通過使用ZeroMQ的隊列交換信息。我正在AWS EC2 Ubuntu實例上運行這些進程。只能部分訪問發佈到ZeroMQ隊列的消息
具體而言,我有一個過程ProcessPub
即不斷運行在InstanceA
和每天一次它產生的3個消息集是那些獲得發佈到3個不同的隊列Q1
,Q2
,和Q3
突發。我還有另一個ProcessSub
ProcessSub
兩個副本,它們在InstanceA
上運行,另一個InstanceB
訂閱這3個隊列,處理傳入的消息並將結果(包括所攝入的消息)轉儲到磁盤上的本地文件中。下面是我觀察:
ProcessSub
的兩個InstanceA
和InstanceB
運行得到每一個突發發佈到Q1
和Q2
ProcessSub
上InstanceA
運行會從每一個所有消息突發發佈到Q3
除了所有消息第一個和最後一個消息ProcessSub
在InstanceB
上運行獲取NONE消息發佈到Q3
換言之,Q1
並Q2
似乎是在兩個InstanceA
和InstanceB
完美可見的,而Q3
似乎是在消息獲取所產生的實例(InstanceA
)和InstanceB
完全看不見部分可見。
我訂閱ProcessSub
的3個隊列的方式是一樣的。
我如何知道爲什麼我無法訪問Q3
消息?
更新:在ProcessPub
,我的,對於Q3
準備消息的代碼的塊,然後將它們發佈到Q3
,然後用不與Q2
Q1
相同。作爲實驗,我通過將發佈到Q3
的塊放在發佈到Q2
和Q1
塊之前的塊之後進行了修改。在此更改之後,所有3個隊列在InstanceB
上可見。因此,在每一次活動中,我都會將所有消息發佈到所有3個隊列中。但是,我發現了另一個問題。在InstanceA
上運行的ProcessSub
將所有從Q
中捕獲的消息重定向到磁盤上的本地文件。所以每當出現爆發時,數據就會以大塊的形式添加到這些文件中。我注意到來自每個隊列的每個突發的第一條消息在本地文件中丟失。我懷疑這與緩衝磁盤上的文件有什麼關係,因爲它是每個爆發的第一個消息,而不是最後一個。順便說一句,在InstanceB
第一條消息被捕獲罰款。所以還是有一些問題(或問題)。
聞起來像某些東西沒有足夠快地連接到Q3。所有三個隊列是否在同一個ømq套接字上發佈? –
我覺得單獨的套接字。順便說一下,我在'InstanceB'上運行了'netstat'。對於'Q1'和'Q2',我得到了'tcp ... ESTABLISHED',對於'Q3'我得到了'tcp ... CLOSE_WAIT'。這是否能夠照亮問題? –
我可以在任一實例上使用'netstat'來獲得一些額外的信息嗎?我應該使用哪些選項? –