每次发布新消息时,我的应用程序都必须接收一条消息。因此,我使用的是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()
方法。谁能帮我这个忙。
答案 0 :(得分:0)
OnMessage API是一个异步过程,它在事件驱动的消息泵中接收消息。在您处置客户端或运行它的代码终止之前,它不会停止接收。上面的代码是错误的。您不应该不实例化订阅客户端,并每次都注册您的回调。 应该要做的是创建客户端,注册具有所需并发性的回调,并坚持使用该客户端,直到不再需要接收消息为止。
请记住,这条消息 pump 必须一直运行。官方文档有些枯燥,也许这个post会有所帮助。
除此之外,我强烈建议不要使用您正在使用的旧版客户端WindowsAzure.ServiceBus。相反,请使用新的Microsoft.Azure.ServiceBus客户端。