ActiveMQ サーバーに接続するための次のコードがあります。接続は機能し、コンシューマーは AMQ Web インターフェイスに表示され、キューにメッセージがありますが、OnMessage は実行されません。
開始コールを移動しようとしましたが、それは役に立ちません。TestConnection はクライアント ID & started を示します: 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);
}
}
}
}