Microsoft服务总线-使用OnMessage()方法从总线接收消息

时间:2018-11-23 09:47:57

标签: c# .net azureservicebus

每次发布​​新消息时,我的应用程序都必须接收一条消息。因此,我使用的是Microsoft文档中提到的OnMessage()方法。

发布新消息时,OnMessage()方法似乎不起作用。为了解决这个问题,我将代码放入无限循环的单独任务中。这似乎是完全错误的。

public void ReceiveMessageFromSubscription(string topicName, string subscriptioName)
{
    Task.Factory.StartNew(() =>
    {
        while (true)
        {
            SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, topicName, subscriptionName);

            Client.OnMessage((message) =>
            {
                try
                {
                    var message = brokerMessage.GetBody<MessageDto>();
                    newMessage.AnnounceNewMessage(message);
                    message.Complete();
                }
                catch (Exception ex)
                {
                    message.Abandon();
                }
            });
        }
    });
}

只要订阅中有消息,就必须调用OnMessage()方法。谁能帮我这个忙。

1 个答案:

答案 0 :(得分:0)

OnMessage API是一个异步过程,它在事件驱动的消息泵中接收消息。在您处置客户端或运行它的代码终止之前,它不会停止接收。上面的代码是错误的。您不应该实例化订阅客户端,并每次都注册您的回调。 应该要做的是创建客户端,注册具有所需并发性的回调,并坚持使用该客户端,直到不再需要接收消息为止。

请记住,这条消息 pump 必须一直运行。官方文档有些枯燥,也许这个post会有所帮助。

除此之外,我强烈建议不要使用您正在使用的旧版客户端WindowsAzure.ServiceBus。相反,请使用新的Microsoft.Azure.ServiceBus客户端。