我们有一个用例,即使用相同的groupId放置一组消息,但MessageSequenceNumber不同。这用于将消息分组以用于逻辑排序,使得在接收器侧,接收器可以基于组顺序对所有消息进行分组。我正在关注IBM MQ v7.5知识中心页面" 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;
}
现在,我想为数组内的所有消息添加1个唯一的groupID,并添加序列号(msgSeqNum)(1,2,3 ..)。我如何通过JMS API完成?我正在IBM IIB v8知识中心页面上寻找JMS版本的代码&#34; Sending messages in a WebSphere MQ message group。
答案 0 :(得分:2)
David Currie在2006年撰写了一篇很好的IBM developerWorks博客,名为&#34;使用WebSphere MQ Java和JMS API对消息进行分组&#34;它描述了如何做你要求的事情,但是最近它被IBM删除了。
我可以通过Google的缓存副本查看它。以下是David在帖子中提供的信息,看起来与获取逻辑相比,put逻辑实现起来要简单得多。我只在这里包含推送逻辑代码,因为这是你所询问的。我通过电子邮件与David联系,询问是否会重新发布此博客。
发送消息组
让我们从查看发送应用程序开始。正如刚才提到的, put消息选项MQPMO_LOGICAL_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();