Java 使用JMSMessageID从MQ队列中删除JMS消息

Java 使用JMSMessageID从MQ队列中删除JMS消息,java,jms,ibm-mq,mq,Java,Jms,Ibm Mq,Mq,有没有一种方法可以使用Java应用程序中的JMSMessageId(不使用工具)从IBM MQ队列中删除JMS消息?此类操作是否针对供应商 查看了用于删除消息的接收操作的API,但是对于删除特定消息,我们需要使用MessageSelector进行过滤并适当地删除,还是有更简单的方法?[检查可直接使用的任何可用方法] 您是否可以提供教程/示例[也可以是链接]来显示此类操作的API用法?当您使用JMSMessageID作为选择器中唯一的消息属性时,WMQ会优化查找,使其与队列中的索引字段MQMD.M

有没有一种方法可以使用Java应用程序中的JMSMessageId(不使用工具)从IBM MQ队列中删除JMS消息?此类操作是否针对供应商

查看了用于删除消息的接收操作的API,但是对于删除特定消息,我们需要使用MessageSelector进行过滤并适当地删除,还是有更简单的方法?[检查可直接使用的任何可用方法]


您是否可以提供教程/示例[也可以是链接]来显示此类操作的API用法?

当您使用
JMSMessageID
作为选择器中唯一的消息属性时,WMQ会优化查找,使其与队列中的索引字段MQMD.MessageID获取的本机WMQ API相同。有关更多详细信息,请参阅主题

QueueReceiver rcvr = sess.createReceiver(inputQ, "JMSCorrelationID = '"+msgId+"'")
您还可以使用Java本机代码使用本机WMQAPI调用来完成同样的工作。您将执行正常的
GET
操作,但在
MQMD
结构中指定消息ID

myMsg.messageId = someMsgID; 
MQGetMessageOptions gmo = new MQGetMessageOptions(); 
myQueue.get(myMsg, gmo);

如何使用messageid删除特定的消息表单队列?

我也有喜欢你的问题,我提供可恢复的功能。您只需要传递
MessageId
Queue
name。对我来说没关系

private void deleteMessage(String messageId, String queueName) {
    try {
         JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi");
         JMXConnector jmxc = JMXConnectorFactory.connect(url);
         MBeanServerConnection conn = jmxc.getMBeanServerConnection();
         ObjectName name = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost");
         BrokerViewMBean proxy = (BrokerViewMBean)MBeanServerInvocationHandler.newProxyInstance(conn, name, BrokerViewMBean.class, true);
         for (ObjectName queue : proxy.getQueues()) {  
            QueueViewMBean queueBean = (QueueViewMBean) MBeanServerInvocationHandler.newProxyInstance(conn, queue, QueueViewMBean.class, true);
            if(queueBean.getName().equals(queueName)) {
                System.out.println("Deleted : " + messageId);
                queueBean.removeMessage(messageId);
                return;
            }
         }
    } catch(Exception e) {
        e.printStackTrace();
    }
}

我使用
activemq-all-5.8.0.jar

谢谢Rob。编辑的问题。我的意思是简单(在一个道具设计师看来)。我从未见过一个简单的程序员。;-:)又弄错了!简单的代码可读性,可以重用可用的实用程序/API。