2

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

JoshMc
  • 10,239
  • 2
  • 19
  • 38
  • 2
    Does this answer your question? [IBM MQ XMS Message Listener fetching only the Messages which is already available in Queue and not a new one](https://stackoverflow.com/questions/64571907/ibm-mq-xms-message-listener-fetching-only-the-messages-which-is-already-availabl) – JoshMc May 18 '21 at 01:12
  • 1
    This is s known APAR that IBM has not closed yet, if you have a support contract you can request a IFIX at the version you need. – JoshMc May 18 '21 at 01:14
  • @JoshMc , i have already tested those versions, seems like they do not provide a solution as you just mentioned, thanks anyway, for now, ill keep refreshing the connection – Gabriel Tomé May 18 '21 at 10:26
  • Your only option is to go back to a lower version (9.1.3 mentioned in the linked answer or ask IBM for a IFIX for a more current version. – JoshMc May 18 '21 at 11:37
  • thank you @JoshMc, i have tried with that exact version and was unable to do it anyway, will wait for the fix i guess – Gabriel Tomé May 19 '21 at 13:06

0 Answers0