文章目录
1. 消息中间件介绍。
(1) JMS和AMQP的区别
JMS的全程是Java Message Service,Java消息服务接口,Java提供的一套面向消息中间件的API,可用于两个系统之间的通信或者异步通信。这有点类似于JDBC,它只是一套接口规范并不做具体实现,具体的实现由各产品去完成,比如ActiveMQ就是基于JMS的一种实现。
AMQP是Advanced Message Queuing Protocol的缩写,这是一个应用层的协议,面向消息中间件而生。AMQP协议主要包含四个部分:
- 生产者(publisher): 生产消息并投递到交换机
- 交换机(exchange): 接收消息并根据路由选择投递到队列
- 队列(queue): 等待消费者获取消息
- 消费者(consumer): 获取消息进行处理
AMQP更加类似于HTTP之类的应用层协议,它定义了网络交换数据的格式,并不关心具体的实现,所以它有良好的跨平台跨语言的能力,更有利于不同平台不同语言的client端和服务端的数据交换。
(2) 当前的主流消息队列
消息队列名称 | 说明 |
ActiveMQ | 它是apache下面的一个子项目,没错就是tomcat那个apache,它是基于JMS接口规范实现的消息中间件,springboot官方对它进行了集成,基于springboot开发可以节省很多配置。 |
RabbitMQ | 这是一个很老牌的消息中间件,采用erlang语言开发,支持很多协议,比如AMQP就包括在内,企业级开发常用,但是由于采用了erlang所以二次开发比较的困难,反正我是不会erlang语言的。 |
RocketMQ | 这是一款国产的MQ,是阿里的开源项目,它是参照了kafka设计的,由Java语言编写,改进了kafka的些不足 |
kafka | 这也是apache旗下的一个中间件,采用scala实现的一个高性能中间件,有很高的的吞吐量。 |
(3) 消息中间件的适用场景
- 业务解耦合
- 异步
- 流量削峰
- 通信
引入了消息中间件也可能导致系统更加复杂,可能会降低可用性和稳定性,实际中项目中引入消息中间件也有很多问题需要解决,比如高可用,重复消费(幂等),消息投递丢失。
#2 学习和介绍RabbitMQ
上面介绍了好几个为什么选择这个呢,因为我项目使用的是这个,为什么选择这个,其实没有那么多原因,springboot官方集成了,所以开发友好,ActiveMQ官方也集成了为什么不选择它呢,上面也说了ActiveMQ不是跨语言的,并且更新不够活跃,RabbitMQ相对较成熟。
问题来了要不要写个很入门很入门的RabbitMQ的安装过程。还是直接hello world走起。