2016-05-02 4 views
0

PUSH/PULL0MQ(Python-> C#)のパターンはPUSHソケットと1つだけPULLソケットです。両方が接続されている限り、作業者がメッセージを処理するのに時間がかかっても、キューに入れられたメッセージの順序は保持されます。0MQ PUSH/PULL PULLソケットが接続されていない場合は壊れています。

ワーカーがしばらく接続を解除してから再接続すると、PUSHソケットでキューに登録されていても、この期間にキューに入れられたすべてのメッセージがランダムな順序で到着します。この問題に対する組み込みのソリューションはありますか、より高度なパターンを使用すべきですか?

私はPULL側のコードを追加します。

using (var receiver = new PullSocket()) 
      { 
       receiver.Bind("tcp://localhost:5557"); 

       while (true) 
       { 
        var payload = receiver.ReceiveFrameString(); 

        log.Debug($"Payload: {payload}"); 
       } 
      } 
+0

それは実際にかなり奇妙です。 zeromqは注文を保証するものではありませんが、ご注文には近いはずです。どの輸送機を使用していますか? – somdoron

+0

私はtcpを使用し、より多くのテストの後、私が受け取る注文は完全にランダムであるようです – marsop

答えて

0

私は0mq PUSH/PULLは配信の順序を保証するものではないことをかなり確信しています。

たぶん、あなたはREQ/REP(またはREQ/ROUTERまたは類似パターン)を行うことができます代わりに - あなたは物事を同期する必要がある場合REQ/REPは非常に便利です。私の頭の上から、メッセージを取り出してREQソケットにプッシュするインプロセスのPUSH/PULLキューを持つことができます。

関連する問題