0

現在、Web ジョブがサービス バス キューを監視するソリューションに取り組んでいます。これはうまく機能しますが、構成内のキューのリストを変更するだけで、任意の数のキューを管理できるように簡単に適応できる必要があります。

現在、私はこれを行うことができます:

    public static void ProcessQueueMessage1([ServiceBusTrigger("queue1")] BrokeredMessage message, TextWriter log)
    {

    }

別のキューについては、別のメソッドを追加する必要があります。

    public static void ProcessQueueMessage2([ServiceBusTrigger("queue2")] BrokeredMessage message, TextWriter log)
    {

    }

明らかに、新しいキューを監視する必要があるたびに新しいメソッドを追加したくありません。

WebJob を使用して、自分の構成にある名前のキューを監視するにはどうすればよいですか? 構成内のキュー名だけでなく、キュー名のリストを意味します。

たとえば、QueueNameResolver を使用して次のことができることを知っています。

    public static void ProcessQueueMessage([ServiceBusTrigger("%nameInCofig%")] BrokeredMessage message, TextWriter log)
    {}

しかし、WebJob の ProcessQueueMessage メソッドを 1 つだけ使用して、キュー名のリストを処理したいのです。

私は年齢を探していて、代わりに WorkerRole を使用するところまで来ています。

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

また、同じ方法で複数のキューを処理している理由も知りたいです。これには、より良い設計パターンとアプローチがあるかもしれません...しかし...

これは、トリガー属性を使用せずに、代わりに Web ジョブ ホストを起動し、構成ファイルで指定されたキューを反復処理するコードを使用して、それぞれに対して同じ OnMessage アクションでキュー クライアントを接続することで実現できます。このようなもの:

.
.
.
var factory = MessagingFactory.CreateFromConnectionString("");
foreach (var queue in queues)
{
    var client = _factory.CreateQueueClient(queue);
    client.OnMessage(OnMessageReceived, options);
}
.
.
.

public void OnMessageReceived(BrokeredMessage message)
{
     // do your work
}

QueueClient と OnMessage の呼び出しには、メッセージの処理方法に関する追加のオプションがいくつかありますが、この方法でうまくいく可能性があります。

于 2016-06-20T14:58:31.697 に答える