activeMQ-08签收机制

2020-02-01  本文已影响0人  誓俭草

activeMQ的签收机制,主要作用于消费者。
1)默认为自动签收;Session.AUTO_ACKNOWLEDGE;
2)手动签收;Session.CLIENT_ACKNOWLEDGE;
具体使用如下:

//创建连接session;第一个参数为事务,第二个参数为签发机制。此处为手动签收机制;
                session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
                //创建消息目的地队列(队列名称)
                Queue queue = session.createQueue(queueName);
                //创建消费者
                messageConsumer = session.createConsumer(queue);
                while(true) {
                    // messageConsumer.receive();此方法会一直等待消息,不会中止进程
                    // messageConsumer.receive(4000L);等待4s后,若无消息,则中止进程,不再等待
                    Message message = messageConsumer.receive();
                    if(message!=null) {
                        TextMessage textMessage = (TextMessage) message;
                        System.out.println("消费的消息是"+textMessage);
                        //需要手动写入以设置签收,不然消息则视为未消费;
                        textMessage.acknowledge();
                    }else {
                        break;
                    }
                }

注意事项:
1)开启事务和非事务,消费者签收机制需要注意,开启事务后,session.commit();后,即使不调用textMessage.acknowledge();消息也会被签收,没有commit,即使手动签收textMessage.acknowledge();也没有作用;
2)总之,MQ的事务session作用大于消息的签收;

上一篇下一篇

猜你喜欢

热点阅读