System.RAP报告了有关Azure Service Fabric项目的属性IStatelessServiceInstance.OpenDuration错误的警告

问题描述

我正在研究一个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,并且循环将中断并且代码将不再被阻塞。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...