我的应用程序必须在每次发布新消息时收到消息。所以我正在使用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()
方法。任何人都可以帮我这个。
OnMessage API是一个异步过程,它在事件驱动的消息泵中接收消息。在您处置客户端或终止运行它的代码之前,它不会停止接收。上面的代码是错误的。您不应该在紧密循环中实例化订阅客户端并且每次都注册您的回调。你应该做的是创建你的客户端,注册一个具有所需并发性的回调,并保持该客户端,直到你不再需要接收消息。
请记住,它是一个必须一直运行的消息泵。官方文件有点干,也许这个post会有所帮助。
除此之外,我强烈建议不要使用您正在使用的旧版客户端WindowsAzure.ServiceBus。相反,更喜欢新的Microsoft.Azure.ServiceBus客户端。