I´m having a trouble reading the second message on IBM MQ (c# + IBM.XMS + ibmcom/mq:latest). Using the default queue "DEV.QUEUE.1", it only keeps listening to messages if the connection is stopped and started again(conn.Stop()/conn.Start()) after the first message arrives. If the messages are already at the queue when the listener runs, all the messages are consumed currectly.
I´m using Docker, this is the MQ version information:(have tried multiple old versions)
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
the code used :
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();
}
Thank you