006 可靠性保证
一 . 概述
我们使用mq的一个好处就是mq可以帮助我们实现消息的可靠性传输.
其实这里的可靠性对于消费者和生产者是不同的,另外mq中间件也有可靠性的保证.
生产者 : 可以使用事务,保证消息可以一次性的发送,
通过使用事务,可以使用提交,回滚等操作.
消费者 : 消息的签收模式
消费者在消费完一个消息的时候,需要将这个信息通知给消息中间件.
常用的模式有:
[1] 自动签收: 一旦消费者获取到消息之后,自动会向中间件发送一个签收.
[2]客户端签收: 消费者必须手动调用acknowledge()方法完成签收消息的发送,
mq中间件的可靠性保证 :
这个保证最主要的就是消息的持久化.
当设置为持久化时,消息可以被持久化到不同的媒介之中,这就能保证消息的安全性.
二 .事务与签收的关系
这两个概念是会相互发生影响的.我们首先需要明白事务和签收的核心概念到底是帮助完成什么样的任务的.
事务 :
mq的事务的概念是保证客户端(生产者和消费者)发送消息给中间件的操作是一致性的(一起发送,commit,出现错误rollback).
也就是说这个事务仅仅只是一些列操作的集合.
生产者 :
生产者使用事务的时候,如果不commit,那么消息就不会发送出去.
不使用事务的话,默认send()方法一调用,消息就会被发送.
消费者:
消费者使用事务,代表设置的签收模式无效.消息的签收是commit()方法决定的.
消费者不使用事务,才会取决于签收的模式.
讲真的,这个设计真的很蹩脚,垃圾的设计.
[总结]
事务情况下:
生产者必须commit()才能发送出去消息
消费者commit()才能签收消息,签收模式没有作用了.
非事务情况下:
生产中send()就发送消息了.
消费者的签收模式才有效.
三 . 持久化
activemq提供了很多的持久化的方式,在这里不去多讲,会专门搞一节玩一下这个,
其实内容还是挺多的 .