ActiveMq学习(二)

jms可靠机制

为什么要有jms可靠机制? 因为可能会出现这样的情况,比如当生产者已经往activemq里面存储了消息,这个时候mq里面已经有了消息,只等消费者来消费,如果消费者拿到消息后在处理消息的过程中出了异常,这个时候怎么办?所以就要有这样的需求?只要消费者不确认签收,那么mq里面就不要删除该数据

JMS消息可靠机制

1.自动 签收:就是说生产者把消息发给activemq之后,生产者就默认消费者已经接收了消息
2.事务消息:
①生产者完成发送消息后,必须要提交给队列
②消费者,获取消息之后,要提交事务,如果消费者没有提交事务,默认表示没有进行消费。那么消费者可能会自动重试机制
在这里插入图片描述
在这里插入图片描述
注意:生产者和消费者在开启事务后都要主动进行提交,不然所做的往mq里面存消息(生产者存消息不成功,那么mq里面就没有新添加的消息)和取消息(消费者虽然拿到消息,但是不提交session,那么mq里面的数据就不删除)
3.手动签收:消费者没有手动签收消息,默认表示没有进行消费。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
手动签收要在生产者端和消费者端代码里面都要把createConnection(Boolean.false,Session.CLIENT_ACKNOWLEDGE)第二个参数改成Session.CLIENT_ACKNOWLEDGE
在这里插入图片描述

ActiveMQ 持久化

ActiveMQ 持久化的意思就是说,当生产者往activemq里面存储消息后,activemq会将消息存储在内存一份,即使activemq宕机,然后再启动,该activemq里面依然有先前存储的消息。

思考题
怎么解决消息中间件的幂等性?
答:核心通过全局ID去进行

猜你喜欢

转载自blog.csdn.net/qq_40241957/article/details/82891062