Springboot与消息中间件RabbitMQ

在大多应用中,可以通过消息服务中间件来提升系统异步通信和扩展解耦能力。在消息服务中,有两个重要的概念:

  1. 消息代理,消息服务器
  2. 目的地
    当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到指定的目的地。

消息队列有两种形式的目的地:

  1. 队列:点对点通信,消息服务器将接收到的消息放入到一个队列中,消息接受者从队列中获取消息内容,消息读取后将会被移出队列,消息只有唯一的发送者和接受者,但不是说只能有一个接受者;
  2. 主题:发布/订阅消息通信,消息发布者发送消息到主题,多个接收者【订阅者】监听这个主题,那么就会在消息到达时同时接收到消息。

用户注册举例【异步处理】
在这里插入图片描述
微服务服务解耦
在这里插入图片描述
秒杀系统【流量削锋】
在这里插入图片描述
两种消息代理规范

  1. JMS:基于JVM的消息代理规范。ActiveMQ、HornetMQ是JMS实现;
  2. AMQP:高级消息队列协议,也是一个消息代理规范,兼容JMS,RabbitMQ是AMQP的实现。

在这里插入图片描述
在SpringBoot中使用消息中间件
在这里插入图片描述
RabbitMQ中的核心概念

  1. Message:消息,由消息头和消息体组成。消息体是不透明的,而消息头是由一系列的可选属性组成,包括routing-key(路由键)、priority(消息优先权)和delivery-mode(消息是否需要持久化)等;
  2. Publisher:消息生产者,发布消息的客户端;
  3. Exchange:交换器,用来接收生产者发送的消息,并将其路由给服务器中的队列。Exchange有4种类型:direct(默认,JMS中的点对点通信)fanouttopic和headers,不同类型的Exchange转发消息的策略区别如下:

direct【完全匹配,点对点模式】
direct
fanout【广播模式】

发送速度最快
在这里插入图片描述
topic【模糊匹配】

将路由键和绑定键的字符串切分为单次,这些单次之间用点隔开。它同样也会识别两个通配符:符号“#”和“*”,“#”匹配0个或多个单词,“*”匹配一个单词。
在这里插入图片描述
5. Queue:消息队列,队列容器,一个消息可以投入一个或多个队列;
6. Binding:绑定,用于消息队列和交换器之间的关联。一个绑定
就是基于路由键将交换器和消息队列连接起来的路由规则,可以将交换器理解成一个由绑定构成的路由表;
7. Connection:网络连接;
8. Channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP命令都是通过信道发送出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说,建立和销毁TCP都是非常昂贵的开销,所以引入了信道的概念,以复用一条TCP连接;

消息队列和交换器之间是多对多关系,一个交换器可以绑定多个消息队列,一个消息队列又可以被多个交换器绑定。
在这里插入图片描述
9. Consumer:消息消费者;
10. Virtual Host:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的消息队列、交换器、绑定和权限机制。vhost是AMQP概念的基础,必须在连接时指定,RabbitMQ默认的vhost是/;
10.Broker:消息队列服务器实体。

RabbitMQ运行机制
在这里插入图片描述
安装RabbitMQ

Docker hub上下载相应的安装包。
在这里插入图片描述

# 下载RabbitMQ
docker pull rabbitmq
# 运行RabbitMQ
# -d 后台运行
# -p 暴露端口
# --name 重命名
# Image ID
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq a9ea0b189b4f
# 查看是否运行成功
docker ps
# 进入RabbitMQ  
docker exec -it myrabbitmq /bin/bash
# 开启配置
rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述
输入默认的用户名guest和默认密码guest,可以进入如下界面。在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zyxhangiian123456789/article/details/107493401