RabbitMQ部署模式
- 单机模式
- 普通模式
一条消息只存在于一个实例(A)中,当consumer链接到其他实例(B)时,B会根据元数据(类似注册表)去A中获取消息再发给consumer,这样只提高了吞吐量并没有高可用,而且当流量大时可能造成流量风暴。(所以基本没啥用)
- 镜像模式
消息和元数据都会同步给其他节点
如何高可用?
发送端
事务模式
- 事务开启
- 事务提交
- 事务回滚
事务模式性能较差,用于多条消息的事务处理(但是一般情况下,消息间应该是无状态的),所以一般不采用这种模式
发布确认模式
ack模式 exchange将消息发到broker后由broker确认,表示已经收到,如果要持久化,那么要等写入磁盘。
消息中间件
毋庸置疑的持久化消息
为什么RabbitMQ的持久化和kafka差很多?
个人理解,kafka使用了linux的特性(零拷贝,顺写,pagecache等),而Rabbit的scale语言使用类似虚拟机屏蔽了操作系统底层,使其可以在多平台上运行势必造成多次内存拷贝等等问题。
接收端
同样是ACK模式,consumer处理完消息后手动ack(手动自动可配)。ack后rabbit才会删除内存(磁盘)中消息。
网友评论