MessageListener only reads one message if connection not restarted

461 Views Asked by At

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

0

There are 0 best solutions below