1

Azure 用に 2 つの Web ジョブを開発しています。1 つはトピックを使用して Service Bus Queue にメッセージを入れ、もう 1 つは同じトピックを使用して ServiceBusTrigger にサブスクライブします。

メッセージはサービス バス キューに正しく送信されますが、ServiceBusTrigger にサブスクライブされた WebJob を実行すると、これらのメッセージは FIFO ベースで処理されません。

メッセージをサービス バス キューに入れる WebJob のコードは次のとおりです。

NamespaceManager namespaceManager = NamespaceManager.Create();

// Delete if exists
if (namespaceManager.TopicExists("SampleTopic"))
{
    namespaceManager.DeleteTopic("SampleTopic");
}

TopicDescription td = new TopicDescription("SampleTopic");
td.SupportOrdering = true;
TopicDescription myTopic = namespaceManager.CreateTopic(td);

SubscriptionDescription myAuditSubscription = namespaceManager.CreateSubscription(myTopic.Path, "ImporterSubscription");

TopicClient topicClient = TopicClient.Create("SampleTopic");
for(int i = 1; i <= 10; i++)
{
    var message = new BrokeredMessage("message"+i);                   
    topicClient.Send(message);
}
topicClient.Close();

サービス バス トリガーにサブスクライブされる WebJob には、次のコードがあります。

namespace HO.Importer.Azure.WebJob.TGZProcessor
{
    public class Program
    {
        static void Main(string[] args)
        {
            JobHostConfiguration config = new JobHostConfiguration();
            config.UseServiceBus();
            JobHost host = new JobHost(config);
            host.RunAndBlock();
        }

        public static void WriteLog([ServiceBusTrigger("SampleTopic", "ImporterSubscription")] string message,
            TextWriter logger)
        {                
            Console.WriteLine(message));
        }
    }
}

キューからのメッセージを FIFO として処理するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

4

Azure Service Bus は FIFO 機能 (セッション) を提供しますが、ブローカー ベースのキュー システムではこの種の動作を想定しない方がよいでしょう。Ben Morris は、非同期メッセージングでの順序付けを想定することはほとんど誤りであり、その理由について、Azure Service Bus でメッセージの順序付けを想定しないでくださいという良い投稿をしました。

于 2016-07-20T06:50:19.620 に答える