我有以下代码连接到 ActiveMQ 服务器。连接有效,消费者在 AMQ Web 界面上可见,队列中有消息但 OnMessage 未执行。
我尝试移动启动呼叫,但这没有帮助。TestConnection 显示客户端 ID 和已启动:true
队列中的消息数量缓慢减少,根据 Web 界面,这是我的消费者正在执行此操作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Apache.NMS;
namespace MQLed
{
class amqclientns
{
public String UriString = "activemq:tcp://hostname:61616";
public string UserName = "";
public string Password = "";
private IConnection connection;
private ISession session;
private IDestination destination;
private IMessageConsumer consumer;
public ILogger Logger = null;
public void TestLog(string Message)
{
if (Logger != null) Logger.WriteLine(Message);
}
public void Connect()
{
try
{
IConnectionFactory factory = new NMSConnectionFactory(new Uri(UriString));
connection = factory.CreateConnection(UserName, Password);
connection.ExceptionListener += new ExceptionListener(OnException);
session = connection.CreateSession();
destination = session.GetDestination("queue://" + "mqled");
consumer = session.CreateConsumer(destination);
// connection.Start();
consumer.Listener += new MessageListener(OnMessage);
connection.Start();
// OnMessage(consumer.ReceiveNoWait());
if (Logger != null) Logger.WriteLine("Listening on " + destination.ToString());
}
catch (Exception ex)
{
if (Logger != null) Logger.WriteLine(ex.Message);
}
}
public void TestConnection()
{
if (Logger != null) {
Logger.WriteLine("TestConnection");
Logger.WriteLine("Client id: " + connection.ClientId);
Logger.WriteLine("Connection started: " + connection.IsStarted);
Logger.WriteLine("Connection metadata: " + connection.MetaData);
Logger.WriteLine("Consumer: " + consumer.ToString());
}
}
public void Disconnect()
{
connection.Close();
}
public void OnException(Exception e)
{
Logger.Log(e.Message, "Exception");
}
public void OnMessage(IMessage message)
{
Logger.WriteLine("OnMessage " + (message != null).ToString());
try
{
if (Logger != null) Logger.WriteLine("Message received");
ITextMessage msg = (ITextMessage)message;
message.Acknowledge();
if (Logger != null) Logger.WriteLine(msg.Text);
}
catch (Exception ex)
{
if (Logger != null) Logger.WriteLine(ex.Message);
}
}
}
}