消息中间件入门解析
Posted SpringForAll社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息中间件入门解析相关的知识,希望对你有一定的参考价值。
本文来源:http://u6.gg/sRLmq
消息队列属于大型网站系统中间件的重要组件,主要解决了应用耦合、异步消息、流量削峰等问题,对于网站实现高性能、可伸缩的架构有很大的帮助。
1. 常用的消息队列
ActiveMQ
Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可运行。
RabbitMQ
RabbitMQ是实现了高级消息队列协议(AMQP:Advanced Message Queuing Protocol)的开源消息代理(亦称面向消息的中间件)。RabbitMQ适用于对数据一致性和可靠性的场景,对吞吐量的场景要求其次。RabbitMQ服务器是用Erlang语言编写。
ZeroMQ
ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库。它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(message broker)。该库设计成常见的套接字风格的API。
与RabbitMQ相比,ZMQ并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,更像一个底层的网络通讯库,在Socket API之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的API接口。简而言之socket之上、MQ之下。
Kafka
IBM介绍Kafka的博客
Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、ApacheStorm、Spark都支持与Kafka集成。适合产生大量数据的互联网服务的数据收集业务。
RocketMQ
RocketMQ 是阿里的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好。
2. MQ的应用场景
2.1 应用系统解耦
耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

以简单的订单库存管理为例,客户下单后,需要通知减库存。传统的做法是订单系统调用库存系统的接口,以串行的方式等待库存系统的结果,这样订单系统和库存系统就有一种耦合关系。加入了消息队列机制后:

订单系统下单后,将消息写入队列并返回下单成功;库存系统订阅消息,获取了下单的消息,做相应的减库存操作;这样每个模块只需要做自己的工作,实现了订单系统和库存系统的解耦。
2.2 流量削峰
在高并发场景下,流量过大,导致服务负载过高甚至挂掉,为了解决这个问题,也可以引入消息队列:

用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
2.3 日志处理
将消息队列用在日志采集和处理中,解决大量日志传输的问题。

如果资源对你有帮助的话
❤️ 给个 「在看」 ,是最大的支持❤️
以上是关于消息中间件入门解析的主要内容,如果未能解决你的问题,请参考以下文章