Java学习-----消息队列

        消息队列是分布式系统中重要的组件之一。使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。

        使用消息队列主要有三点好处:
        (1)通过异步处理提高系统性能(减少响应所需时间):用户提交请求后,服务器将其发送到消息队列后直接就给出响应,相较于传统的服务器收到请求后,对数据库进行处理,得到结果再响应这个流程,消息队列通过处理和响应的分离,大大提高了系统性能。
        (2)削峰/限流:先将短时间高并发产生的事务消息存储在消息队列中,然后后端服务再慢慢根据自己的能力去消费这些消息,这样就避免直接把后端服务打垮掉。
        (3)降低系统耦合性:一个模块将信息放入消息队列中,其他模块再来消息队列中取走需要的信息,可以减少模块之间的依赖,大大降低耦合性。

        消息队列主要采用两种方式:发布-订阅模式和点对点模式。如果把消息的提供者视为生产者,使用消息的部分视为消费者,那么这两个模式中,前者是一个生产者把生产的消息发布到消息队列中,多个消费者订阅消息;后者是一个生产者专门给一个消费者生产消息。

        虽然消息队列好处多多,但也有一些显而易见的缺点:

        系统可用性降低: 系统可用性在某种程度上降低,引入后,程序员需要额外考虑消息在传输中丢失的可能
        系统复杂性提高: 加入消息队列后之后,程序员需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题
        一致性问题: 消息队列可以实现异步,消息队列带来的异步确实可以提高系统响应速度。但是这也会导致出现消息队列会出现内容不一致的情况。

        常见的消息队列主要有:ActiveMQ、RabbitMQ、RocketMQ、Kafka,其差异如下:

对比方向概要
吞吐量万级的 ActiveMQ 和 RabbitMQ 的吞吐量(ActiveMQ 的性能最差)要比 十万级甚至是百万级的 RocketMQ 和 Kafka 低一个数量级。
可用性都可以实现高可用。ActiveMQ 和 RabbitMQ 都是基于主从架构实现高可用性。RocketMQ 基于分布式架构。 kafka 也是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用
时效性RabbitMQ 基于erlang开发,所以并发能力很强,性能极其好,延时很低,达到微秒级。其他三个都是 ms 级。
功能支持除了 Kafka,其他三个功能都较为完备。 Kafka 功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用,是事实上的标准
消息丢失ActiveMQ 和 RabbitMQ 丢失的可能性非常低, RocketMQ 和 Kafka 理论上不会丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值