我在阅读 IBM MQ (c# + IBM.XMS + ibmcom/mq:latest) 上的第二条消息时遇到问题。使用默认队列“DEV.QUEUE.1”,只有在第一条消息到达后连接停止并重新启动(conn.Stop()/conn.Start())时,它才会继续侦听消息。如果在侦听器运行时消息已经在队列中,则所有消息都被立即消费。
我正在使用 Docker,这是 MQ 版本信息:(已尝试多个旧版本)
bash-4.4$ dspmqver
Name: IBM MQ
Version: 9.2.2.0
Level: p922-L210310.DE
BuildType: IKAP - (Production)
Platform: IBM MQ for Linux (x86-64 platform)
Mode: 64-bit
O/S: Linux 4.19.128-microsoft-standard
O/S Details: Red Hat Enterprise Linux 8.3 (Ootpa)
InstName: Installation1
InstDesc: IBM MQ V9.2.2.0 (Unzipped)
Primary: N/A
InstPath: /opt/mqm
DataPath: /mnt/mqm/data
MaxCmdLevel: 922
LicenseType: Developer
使用的代码:
using IBM.XMS;
...
public IConnection conn;
static void Main(string[] args)
{
Program app = new Program();
app.Setup();
Console.ReadLine();
}
public void Setup()
{
XMSFactoryFactory xff = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory cf = xff.CreateConnectionFactory();
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, "localhost");
cf.SetIntProperty(XMSC.WMQ_PORT, 1414);// 9443);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, "DEV.ADMIN.SVRCONN");
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "QM1");
cf.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_V1);
cf.SetStringProperty(XMSC.USERID, "admin");
cf.SetStringProperty(XMSC.PASSWORD, "passw0rd");
conn = cf.CreateConnection();
Console.WriteLine("connection created");
ISession sess = conn.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
IDestination dest = sess.CreateQueue("DEV.QUEUE.1");
IMessageConsumer consumer = sess.CreateConsumer(dest);
MessageListener ml = new MessageListener(OnMessage);
consumer.MessageListener = ml;
conn.Start();
Console.WriteLine("Consumer started");
}
private void OnMessage(IMessage msg)
{
ITextMessage textMsg = (ITextMessage)msg;
Console.WriteLine("Got a message: " + textMsg.Text);
conn.Stop(); // MUST BE CHANGED - for some reason, new messages are not being updated, so connection needs to be restarted
conn.Start();
}
谢谢