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

问题描述 投票:0回答:1

我的应用程序必须在每次发布新消息时收到消息。所以我正在使用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()方法。任何人都可以帮我这个。

c# .net azureservicebus
1个回答
0
投票

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

请记住,它是一个必须一直运行的消息泵。官方文件有点干,也许这个post会有所帮助。

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.