【问题标题】:System.RAP reported Warning for property IStatelessServiceInstance.OpenDuration error with azure service fabric project [closed]System.RAP 报告 azure service fabric 项目的属性 IStatelessServiceInstance.OpenDuration 错误警告 [关闭]
【发布时间】:2021-01-24 15:27:01
【问题描述】:

我正在开发一个 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();
}

【问题讨论】:

  • 你 already posted this same question 并且由于缺乏清晰度而被关闭。这个问题没有额外的细节。您能否添加有关您的用例、您正在使用/创建的服务、何时看到错误等的任何详细信息?仅发布错误消息并不足以解释。它需要更多的上下文。
  • @JustinBertram 你现在可以看看这个
  • 目前尚不清楚您在什么时候收到此警告消息。另外,您为什么认为这与使用 JMS 消息有关?
  • 我认为它与侦听获取 Active MQ 消息的 TCP 有关。
  • 您能否澄清为什么您认为它与 ActiveMQ 客户端有关?此外,您仍然没有说明您在什么时候收到此警告消息。是你启动消费者的时候吗?是当消费者收到一条消息并正在等待另一个消息时?是消费者关门的时候吗?

标签: c# activemq azure-service-fabric apache-nms


【解决方案1】:

这个问题几乎可以肯定是由于您的代码可能永远阻塞造成的。具体来说,如果没有消息到达,consumer.Receive() 将永远阻塞。正如the documentation 所说:

等待消息可用并返回

此外,即使消息确实到达,while 循环也会确保包含方法永远不会返回。

我建议您在尝试使用消息时指定超时。如果超时,则Receive 将返回null,循环将被打破,代码将不再被阻塞。

【讨论】:

  • 感谢回复,能否分享一些示例代码,如何在接收方法中使用超时,真的很有帮助。
  • 仅供参考,已使用 MessageListener 解决
猜你喜欢
  • 2021-09-22
  • 2020-07-05
  • 2018-01-28
  • 1970-01-01
  • 2018-08-31
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多