ActiveMQ .net 客户端锁定[已关闭]

问题描述 投票:0回答:3

我使用 Apache.NMS 和 Apcahe.NMS.ActiveMQ(版本 1.0)库编写了一个 Windows 服务。该服务使用来自供应商服务器的 ActiveMQ 消息。

服务启动连接并侦听消息(我处理 OnMessage 事件)

该连接是事务连接,因此我在每条消息后调用 commit。

当服务启动时,一切都运行良好,并且会持续一段时间。然而,当它运行一段时间后,它就不再消费消息了。即使我重置了服务。通常需要重新启动我的服务和供应商服务器(tomcat)才能使事情再次进行。供应商坚称他们没有任何问题。

任何一方(客户端或服务器)都不会抛出异常 - 它只是“卡住”。

我应该考虑使用 Spring.Messaging.Nms 吗?

.net activemq
3个回答
3
投票

我发现了问题。建立连接和消息侦听器后,服务进入 Thread.Sleep(500) 循环。哑的。我重构了该服务以在 OnStart 中启动所有内容并在 OnStop 中处理它。

自从这样做以来,一切都运行得很完美。

键盘和椅子之间发生经典的 ID-10-T 错误。


0
投票

没关系,我在这里找到的:

使用 ActiveMQ 和 NMS 进行事务消息处理


0
投票

我的代码有点不同。我设置了一个响应“OnMessage”事件的侦听器,而不是循环轮询。我的代码类似于下面的代码。我的实际代码中有很多不相关的东西,但精神是一样的。

factory = new Apache.NMS.ActiveMQ.ConnectionFactory("tcp://activemq:61616");

connection = factory.QueueConnection(factory, "MyQueue", AcknowledgementMode.AutoAcknowledge)

consumer = connection.Session.CreateConsumer(connection.Queue, "2 > 1"); //Get every msg

consumer.Listener += new MessageListener(OnMessage);


private void OnMessage(IMessage message)
{
  //Process message here.;
}
© www.soinside.com 2019 - 2024. All rights reserved.