问题描述
我正在研究一个Azure Service Fabric项目,该项目使用Apache.NMS .NET库从ActiveMQ中读取一条消息,并创建持久的使用者以从ActiveMQ中读取特定消息。
我能够阅读该消息,并且一切正常,但是出现以下警告。
'System.RAP' reported Warning for property 'IStatelessServiceInstance.OpenDuration'. The api IStatelessServiceInstance.Open on node _Node_0 is stuck.
此警告会导致服务出错,因此我需要删除该警告。
有人向我发出警告。
这是我如何阅读邮件的快照。
try
{
ITopic dest = AMQSession.GetTopic(TopicName);
using (IMessageConsumer consumer = AMQSession.CreateDurableConsumer(dest,SubscriptionName,MessageSelector,false))
{
IMessage message;
while ((message = consumer.Receive()) != null)
{
ITextMessage txtMsg = message as ITextMessage;
}
}
}
catch (Exception ex)
{
Close();
}
finally
{
Close();
}
解决方法
几乎可以肯定,此问题是由于您的代码可能永远被阻塞而导致的。具体来说,如果没有消息到达,consumer.Receive()
将永远阻塞。正如https://www.npmjs.com/package/xlsx所述:
等待直到消息可用并返回
此外,即使消息 到达while
循环,也可以确保包含方法永远不会返回。
我建议您在尝试使用消息时指定超时。如果超时已过去,则Receive
将返回null
,并且循环将中断并且代码将不再被阻塞。