如何设计一个MQ消息队列?1.先上图,明确一个消息发送和消费的流程2.消息消息首先需要定义消息协议,比如ActiveMQ,Stomp,XMPP等3.消息协议定义好了,明确消息队列需要满足什么场景是否需
如何设计一个MQ消息队列?
1.先上图,明确一个消息发送和消费的流程2.消息消息首先需要幸运飞艇定[pinyin:dìng]义消息协议,比如ActiveMQ,Stomp,XMPP等
3.消幸运飞艇息协议定义好了,明确消息队列需要满(繁体:滿)足什么场景
是否需要保证消息可靠性,如开云体育果需要就要做存储(繁体:儲)的高可用
是否需要支持[读:chí]同步和异步消息
是亚博体育否《fǒu》需要保证消息的顺序
是否(fǒu)需要支持延时消息
具体可以参照很多开源实(繁体:實)现的特(练:tè)性,比【读:bǐ】如RocketMQ就是高可靠的,Kafka就是高吞吐量的,但是不是高可靠的。
RabbitMQ如何通过持久化保证消息99.99%不丢失?
当下主流的消息系统有RabbitMQ、RocketMQ、ActiveMQ等,而RabbitMQ是基于Erlang开发,无论是并发、延时表现都很好。RabbitMQ消息可靠性是靠什么实现的?
消息可靠性是RabbitMQ的一大特点,RabbitMQ靠什么实现消息可靠性的呢?其实就是通过消息持久化来实现的,这样就避免了服务异常(重启、宕机)下消息和队列丢失的风险。消息持久化是指RabbitMQ将内存中[读:zhōng]的数据(交换器Exchange、队列Queue、消息Message)落地到硬盘中存储,以防止异常情况导致内存中的数据丢失《读:shī》。
RabbitMQ如何实现消息持久化?
RabbitMQ中不同数据持久化方式是不同的,主要有:1、交换器(练:qì)(Exchange)的持久化
交换器Exchange若丢失会影响后续消息的写[繁:寫]入,我们在创建Exchange时需要指(pinyin:zhǐ)定durable为true表示持(pinyin:chí)久化。
2、队列(Queue)的[读:de]持久化
在上面第一步操作中,在创建{拼音:jiàn}交换器时即(练:jí)使设置了durable为true后,Exchange不会丢失,但是里面的队列依旧会丢失。如何保证队列持久化呢?同样是在创建队列(pinyin:liè)时指定durable为true即可。
3、消息澳门威尼斯人《xī》(Message)的持久化
上面两步操作后,在重启RabbitMQ后,虽然Exchange和Queue不会丢失,但是Queue里的消息是会丢失的,那如何保证消息持久化不丢失呢?我们设置消息投递模式(deliveryMode)为2即代表消息持久化。
消息持久化并不能100%保证数据不丢失
当我们将交换器/队列/消息都设置了持久化依旧不能100%保证数据不会丢失。这其实很好理解,内存中的数据写入硬盘是要时间的,突然断电、宕机重启等情况时消息可能没来得及落地,那么这些消息就有丢失的可能。消息持久化会带来性能问题
我们知道消息持久化是将内存中的数据写入硬盘中,但硬盘的读写速度远不如内存,所以开启消息持久化后会影响RabbitMQ的性能。以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区(繁:區)交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更【读:gèng】多科技《读:jì》知识!
本文链接:http://21taiyang.com/Family/2473781.html
mq堵塞了[繁体:瞭]怎么办转载请注明出处来源