代码之家  ›  专栏  ›  技术社区  ›  Neer1009

如何在Java中实现IBM MQ中的逻辑排序?

  •  1
  • Neer1009  · 技术社区  · 7 年前

    Message groups

    我编写了一个代码来放置消息:-

    public boolean writeMessage(String[] messages, String queueName) {          
    
                    Session session = getQueueConnection().createSession(true,
                        Session.AUTO_ACKNOWLEDGE);
    
    
                Destination destination = session.createQueue(queueName);
                messageProducer = session.createProducer(destination);
                for (int i = 0; i < messages.length; i++) {
                    TextMessage message = session.createTextMessage(messages[i]);
                    messageProducer.send(message);
                }
    
                // Commit the send (Actually put messages to Queue)
                session.commit();
                return true;
    }
    

    Sending messages in a WebSphere MQ message group .

    1 回复  |  直到 7 年前
        1
  •  3
  •   JoshMc    3 年前

    David Currie在2006年写了一个很好的IBM developerWorks博客,标题是“使用WebSphere MQ Java和JMS API对消息进行分组”,该博客描述了如何执行您的请求,但似乎最近被IBM删除了。


    Wayback Machine link to "Grouping messages using the WebSphere MQ Java and JMS APIs"


    下面是David在帖子中提供的信息,看起来put逻辑比get逻辑更容易实现。我只包括在这里放置逻辑代码,因为这是您询问的内容。我通过电子邮件联系了大卫,问他这个博客是否会再版。

    让我们从发送应用程序开始。如上所述, put消息选项MQPMO\u LOGICAL\u ORDER只是一条指令 标识符和序列号。下面清单3中的示例 演示如何在JMS API中没有此选项的情况下

    清单3。使用WebSphere MQ JMS API发送消息组

    MQConnectionFactory factory = new MQConnectionFactory();
    factory.setQueueManager("QM_host")
    MQQueue destination = new MQQueue("default");
    destination.setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
    Connection connection = factory.createConnection();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    MessageProducer producer = session.createProducer(destination);
     
    String groupId = "ID:" + new BigInteger(24 * 8, new Random()).toString(16);
     
    for (int i = 1; i <= 5; i++) {
     
        TextMessage message = session.createTextMessage();
        message.setStringProperty("JMSXGroupID", groupId);
        message.setIntProperty("JMSXGroupSeq", i);
     
        if (i == 5) {
            message.setBooleanProperty("JMS_IBM_Last_Msg_In_Group", true);
        }
     
        message.setText("Message " + i);
        producer.send(message);
     
    }
     
    connection.close();