2015-10-01 4 views
6

これは私が見つけることができる最も近い前の質問です:Azure Service Bus Subscription OnMessage not receiving messages紺色のサービスバスがすべてのメッセージを受信して​​いない(〜65%のみ)

同じことが私にも起こります。トピックの名前を変更すると、もう一度動作します。その後、そのサービスバスのトピックは再び壊れています。 65〜71%のメッセージしか到着しません。サブスクリプションもトピックも削除しないでください。話題の名前はしばらくしたら何とか汚染されているようだ。トピックが壊れているときには、メッセージが届かないときにシステムがうまく動作しないということを除いて、私は言うことができないので、実際には本当に悪いです。ランダムに新しい名前で新しいトピックを作成して、まったく悪い解決策のように思えます。

私は1つのプロセスでループをテストし、メッセージを送信してから、別のプロセスでループを受信して​​カウントします。新しいトピック名では完全に動作します。そして、私はサブスクリプションにリスナーを1つしか持たないことを知っています。それはピーロックです。メッセージを完成させる必要があります。

誰でも?これをどうすれば解決できますか?

更新日: ここには発見された問題があります。私は1つのサブスクリプションを作成し、それに対する接続を維持しました。 1つのトピックが作成され、バスは10回再作成され、毎回100のmsgが送信されました。 msgは失われません。 私は1つのサブスクリプションを作成し、バスが再作成され、100のmsgが送信されるたびに新しいサブスクリプションクライアントを作成しました。 msgsの50%を失う。 トピックが以前のサブスクリプションクライアントを認識していて、msgsがその2つに対処されているようですか?

新たな疑問: 私はこれを処理する方法のまわりで私の頭をラップしようとしています。同じサブスクリプション名を持つ新しいサブスクリプションクライアントの作成につながるプロセスの再起動が、最初のサブスクリプションクライアントと2番目のサブスクリプションクライアント間のメッセージを処理することを誰もが確認できますか? 私はサブスクリプションモジュールを再起動することで障害を処理しようとしているので、サブスクリプションが存在するかどうかをチェックし、サブスクリプションクライアントを作成するステップを経て、そして、..ソリューションの

提案をも非existant加入者に配られているメッセージを避けるため、気圧: は古いサブスクリプションを追跡する、と私は、プロセスを再起動する必要があれば、新しいサブスクリプションを作成しますか? プロセスが停止してから新しいサブスクリプションが作成されるまでの間にウィンドウを残します。メッセージは「デッド」サブスクリプションにのみポンピングされます。これらのメッセージは失われます。 それ以降のメッセージは、少なくとも新しいサブスクリプションで受信されます。 男..以前はこの問題が処理されていたに違いありません。私はそれを正しくしていない。ここでいくつかの指導を高く評価します。

解決策: これは、すべての仕事に適したツールです。この状況では、Pub/SubではなくQueueが必要です。 すべて解決しました。私は上記と同じテストをしていますが、代わりにキューを使用しています。もちろん、メッセージを受け取ったクライアント側では、以前の(死亡した)サブスクライバが新しいメッセージを受信して​​も問題はありません。一度に1つのキュークライアントだけが生きているので、キューからメッセージを取り出せるのはその人だけです。

+0

良い仕事!解決策として回答を投稿し、正しいものとして受け入れてください。それは、あなたの質問に答えられたことを人々が知るのを助けるでしょう。 –

答えて

3

解決策:これはすべて、仕事に適したツールです。この状況では、Pub/SubではなくQueueが必要です。すべてが解決されました。私は上記と同じテストをしていますが、代わりにキューを使用しています。もちろん、メッセージを受け取ったクライアント側では、以前の(死亡した)サブスクライバが新しいメッセージを受信して​​も問題はありません。一度に1つのキュークライアントだけが生きているので、キューからメッセージを取ることができるのはその1つだけです。

関連する問題