【问题标题】:how to send ack message to IBM MQ using java如何使用 java 向 IBM MQ 发送 ack 消息
【发布时间】:2020-12-14 14:15:08
【问题描述】:

我有一个从 IBM MQ 队列管理器读取的代码,但我想从 IBM MQ 读取而不从队列中删除消息,只有在我向 IBM MQ 发送确认后我想删除消息

这是我的 IBM 阅读器代码:

public class IBMReaderStub extends AbstractReader {
    private JMSContext context = null;
    JMSConsumer consumer;
    Destination destination;
    
    public IBMReaderStub(String queueName) {
        this(queueName, new IBMListener());
    }
   
    public IBMReaderStub(String queueName, IBMListener onMessage) {
        super(ConfigurationManager.getString(HOST), ConfigurationManager.getInt(PORT, DEFAULT_IBM_PORT), queueName, new QueueWithThreadPool(), onMessage);
    }
   
    @Override
    protected void initializeConsumer() {
        try {
            JmsConnectionFactory jmsConnectionFactory = createJmsConnectionFactory();
            context = jmsConnectionFactory.createContext();
            destination = context.createQueue("queue:///" + getQueueName()); // Set the producer and consumer destination to be the same... not true in general
            consumer = context.createConsumer(destination);
        } catch (Exception e) {
            System.out.println(e);
        }
        listen();
    }

    @Override
    public void listen() {
        consumer.setMessageListener(getOnMessage());
    }

    private JmsConnectionFactory createJmsConnectionFactory() throws Exception {
        JmsFactoryFactory jmsFactory = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
        JmsConnectionFactory jmsConnectionFactory = jmsFactory.createConnectionFactory();
        jmsConnectionFactory.setStringProperty(WMQConstants.WMQ_HOST_NAME, this.getHost());
        jmsConnectionFactory.setIntProperty(WMQConstants.WMQ_PORT, getPort());
        jmsConnectionFactory.setStringProperty(WMQConstants.WMQ_CHANNEL, ConfigurationManager.getString(CHANNEL_NAME));
        jmsConnectionFactory.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, ConfigurationManager.getString(QUEUE_MANAGER_NAME));
        jmsConnectionFactory.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, ConfigurationManager.getString(APPLICATION_NAME));
        jmsConnectionFactory.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
        return jmsConnectionFactory;
    }
    
    public static void main(String[] args) {
        try {
            IBMReaderStub reader = new IBMReaderStub("hey");
            IBMReaderStub reader2 = new IBMReaderStub("hey");
            reader.listen();
            reader2.listen();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

【问题讨论】:

  • 您需要使用事务处理会话并提交。

标签: java ibm-mq ack


【解决方案1】:

IBM MQ 提供对消息的事务访问,因此您需要创建事务会话,然后您可以根据需要提交或回滚消息获取或放置。

https://www.ibm.com/support/knowledgecenter/SSFKSJ_9.1.0/com.ibm.mq.dev.doc/q032210_.html

https://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.dev.doc/q032220_.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-29
    • 2021-08-17
    • 1970-01-01
    • 2018-09-14
    • 2021-06-15
    • 2017-11-08
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多