2017-01-22 4 views
1

私はウェブサイトとウェブジョブを持っています。ウェブサイトは一方向クライアントで、ウェブジョブはワーカーです。Rebus - 遅延メッセージを別のキューに送信する(Azure ServiceBus)

私はキューのAzure ServiceBusトランスポートを使用します。

InvalidOperationException: Cannot use ourselves as timeout manager because we're a one-way client

私はウェブサイトのバスからBus.Deferを送信しよう:

は、私は次のエラーを取得します。

Azure Servicebusはtimeoutmanagerのサポートを内蔵しているので、一方向のクライアントからこのイベントを処理しないでください。

Bus.Deferのドキュメントには次のようなメッセージが記載されています。ヘッダーをヘッダーに添付して、構成されたタイムアウトマネージャエンドポイント ///(デフォルトは自分自身)に配信することによって、メッセージの配信を遅延させます。時間が右である場合には、繰延メッセージは、ヘッダにより示されたアドレスに返され、「

私はこのようなRETURNADDRESSを設定することによってこの問題を解決でした:。

headers.Add(Rebus.Messages.Headers.ReturnAddress, "webjob-worker"); 

答えて

0

Could I fix this by setting the ReturnAddress like this: headers.Add(Rebus.Messages.Headers.ReturnAddress, "webjob-worker");

はい:)

問題は次のとおりです。await bus.Defer Rebusでメッセージを送信すると、デフォルトで送信者の入力キューにメッセージが返されます。

あなたがone-wa yクライアントには、入力キューがないため、タイムアウトが経過した後にメッセージを受信する方法がありません。

リターンアドレスを設定するとこれが解決されますが、解決策は厳密にエレガントではありません。

var routingApi = bus.Advanced.Routing; 

await routingApi.Defer(recipient, TimeSpan.FromSeconds(10), message); 

が、残念ながらそれは現時点ではその方法を持っていない:REBUSはこのように呼ばれることができ、そのルーティングAPI、上Defer方法があったらよりよいAPIは次のようになります。

要約:はい、遅延メッセージにリターンアドレスを明示的に設定すると、一方向クライアントはメッセージを遅延することができます。

+0

これはRebusに追加できる機能ですか?もしそうなら、私はGitHubレポで問題を作りますか? –

+0

さて、私はそれについて考えました - しかし、どこに追加すべきか疑問に思っていましたが、それをどう呼び出すべきか疑問に思っていました。今のところ、 'IBus'で拡張メソッドを作成して追加することをお勧めします。宛先キューを引数として受け入れる – mookid8000

関連する問題