一、概念理解
RabbitMQ 是Erlang语言实现的基于OPT 平台的一款成熟消息队列中间件,SpringCloud 也提供了无缝整合RabbitMQ的方案。RabbitMQ 提供了可视化的管理端,可实时监测各队列、交换器的运行情况,实时展示消息处理的统计结果。RabbitMQ引入了较多新的概念,比如:Virtual host、EXChange、Binding、BindingKey、信道、Channel、Routing-key、Connection
外部与RabbitMQ之间实现发布消息、接收消息、订阅队列都是通过信道(Channel)实现的,一个TCP连接上创建多个Channel 无限制。
TCP连接打开就会创建AMQP信道。
Virtual host :它表示一批交换器、消息队列和相关联对象。Virtual host之间相互独立、共享相同的身份认证,可以理解为每个Virtual host就是一个微型的RabbitMQ。拥有自己的队列、交换器、绑定、权限机制。RabbitMQ 默认的vhost 是 /
Routing-key:消息发到MQ时,消息将拥有一个路由键属性,即使是空的,MQ也会将其与已绑定使用的路由键进行匹配,匹配不上就将消息放入黑洞。
EXChange:它就是生产者服务与具体队列之间的一个路由规则的实现(体现),作用主要是指定消息发往哪个或哪几个队列。常用类型的主要有:direct(完全匹配/发布订阅)、fanout(广播)、topic(主题/规则匹配)。
Binding:消息队列与交换器之间的关联关系。也就是交换器和消息队列之间的路由关系。
为什么用信道?因为TCP的创建和销毁对系统的消耗较大,创建需要三次握手,销毁需要四次分手。信道的原理是一个线程用一条信道共用一个TCP连接,而一条TCP连接可以容纳无限的信道,所以每秒成千上万的消息请求也不会成为性能的瓶颈。
二、RabbitMQ 与SpringCloud 整合:
第一阶段:简单上手
第一步:引入Rabbit相关的依赖包:
pom.xml
<!-- rabbitMQ依赖坐标 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
第二步:配置全局变量:
application.properties