【发布时间】:2021-08-06 20:58:51
【问题描述】:
我在阅读 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();
}
谢谢
【问题讨论】:
-
这是 IBM 尚未关闭的已知 APAR,如果您有支持合同,您可以申请所需版本的 IFIX。
-
@JoshMc ,我已经测试过这些版本,似乎它们没有提供您刚才提到的解决方案,无论如何,谢谢,现在,我会继续刷新连接
-
您唯一的选择是返回到较低版本(链接答案中提到的 9.1.3 或向 IBM 索要 IFIX 以获得更新的版本。
-
谢谢@JoshMc,我已经尝试过那个确切的版本,但无论如何都无法做到,我猜会等待修复
标签: c# ibm-mq xms message-listener