一、消息的确认
Consumer拉取消息后,如果没有做确认acknowledge,此消息不会从MQ中删除。
Consumer拉取消息后,如果未确认,那么消息会被锁定,如果Consumer关闭时,仍然没有确认消息,则释放锁定信息,消息将发送其他的consumer处理
消息一旦处理,应该必须确认,类似数据库中的事务管理机制
测试:开启确认机制,但不确认消息
如果在消息确认前代码出现异常,消息又想重新消费,有两种方案:
1、把Consumer端变成Producer,重新发送此消息到MQ中,让其他Consumer重新消费
2、把未处理的信息写入到日志文件/DB中,再定时清理未处理的消息
二、消息过滤
对消息消费者处理的消息数据进行过滤。这种处理可以明确消费者的角色,细分消费者的功能。
设置过滤:
Session.createConsumer(Destination destination, String messageSelector);
过滤信息为字符串,语法类似 SQL92 中的 where 子句条件信息。可以使用诸如 AND、OR、IN、NOT IN 等关键字。详细内容可以查看 javax.jms.Message 的帮助文档。
注意:消息的生产者在发送消息的的时候,必须设置可过滤的属性信息,所有的属性信息设置方法格式为:setXxxxProperty(String name, T value)。 其中方法名中的 Xxxx 是类型,如 setObjectProperty/setStringProperty 等。