RabbitMQ 消息中间件

前言

安装

# docker run 方式
docker run -d -p 15672:15672 -p 5672:5672 --name app_rabbitmq --network app -e RABBITMQ_DEFAULT_USER = admin -e RABBITMQ_DEFAULT_PASS = nieao0823.. -e RABBITMQ_DEFAULT_VHOST = app_host --restart = always -v /usr/local/docker/app/rabbitmq/data:/usr/lib/rabbitmq rabbitmq:3.7.15

# docker-compose.yml
rabbitmq:
    container_name: "app_rabbitmq"
    image: "rabbitmq:3.7.15"
    networks:
      - app
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
      RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_DEFAULT_VHOST}
    volumes:
      - "/usr/local/docker/app/rabbitmq/data:/usr/lib/rabbitmq"

# .env
RABBITMQ_DEFAULT_USER=admin
RABBITMQ_DEFAULT_PASS=123456
RABBITMQ_DEFAULT_VHOST=app_host

# Rabbitmq Management
docker exec -it app_rabbitmq bash 
- rabbitmq-plugins enable rabbitmq_management # 进入容器内部执行此命令开启rabbitmq控制页面

理论概念

MQ(Message Queue)本质上是一个队列,FIFO先进先出,队列中存放的是Message消息,是一种跨进程的通信机制,用于上下游传递消息,实现逻辑解耦,物理解耦的通信服务,能够实现流量削峰,系统应用间的解耦。

RabbitMQ特点

  1. 可靠性:通过支持消息持久化,支持事务,支持消费端和传输的ack等来确保消息可靠性。
  2. 路由机制:支持主流的订阅消费模式,如广播,订阅,headers,路由匹配等。
  3. 扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态的扩展集群中的节点。
  4. 高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下仍然可用。
  5. 多种协议:RabbitMQ除了支持原生的AMQP协议,还支持STOMP,MQTT等多种消息中间件协议。
  6. 多语言客户端:RabbitMQ几乎支持所有常用的语言,比如Java,Python,C,PHP等。
  7. 管理界面:RabbitMQ提供了简易且丰富的用户界面,使得用户可以监控和管理消息,集群中节点等。
  8. 插件机制:提了许多的插件,以实现从多方面进行扩展,也可以自定义编写插件。

MQ的选择

  1. ActiveMQ:单机吞吐量过万,时效性ms级别,可用性高,消息可靠,较低的概率丢失数据;框架维护较少、高吞吐量场景较少使用
  2. Kafka:大数据而生,百万级TPS的吞吐量,在大数据日志采集被大规模使用;消息失败不支持重试、社区更新较慢
  3. RocketMQ:单机吞吐量十万级,可用性非常高,分布式架构,支持10亿级别的消息堆积,Java语言;支持的客户端语言不多
  4. RabbitMQ:单机吞吐量万级别,基于AMQP(高级消息队列协议)基础上完成,可复用的企业消息系统,支持多种语言,社区活跃;商业收费,学习成本高

RabbitMQ概念名词

Connection连接 Channel通道 Queue队列 Exchange交换机 Virtual host虚拟主机
在这里插入图片描述

Broker表示就是RabbitMQ消息中间件服务;
Virtual host相当于namespace概念,多用户使用时,可以划分出多个vhost,实现数据的隔离性;(数据库中库的理念)
Channel生产者与消费者频繁的创建与关闭Connection会浪费系统资源开销,Channel是在Connection内部建立的逻辑链接,Channel之间是完全隔离的;

Exchange交换机定义

Exchange交换机主要负责根据不同的分发规则将消息分发到不同的Queue中,供订阅了相关Queue的消费者消费到指定的消息。Producer生产者在向Exchange发送一条消息的时候,必须指定Routing Key(路由键),然后Exchange接收到这条消息后,会解析Routing Key然后根据Exchange与Queue的绑定规则(Binding Key)将消息分发至符合规则的Queue中。

  1. direct直接策略 ,Routing Key路由键与Binding Key绑定路由键相同,才会分发消息;
  2. fanout扇形策略,广播发送;所有与Exchange绑定的Queue都会收到消息,不关心RoutingKey;
  3. topic主题策略, Topic类型的Exchange会对Routing Key进行匹配,只要满足某个通配符的条件就会分发至对应的Queue上。
    1. Routing Key必须是一串字符串,每个单词通过"."分隔;
    2. 符号"#"表示匹配一个或者多个字符;
    3. 符号"*"表示匹配一个单词。
  4. headers头部策略, 与主题交换机类似,只不过headers的Exchange与Queue之间的绑定不再通过Binding Key绑定,而是通过头部Arguments绑定,主题交换的rounting key只能是字符串而headers可以是哈希值和整型;

RabbitMQ问题

  • 持久化
  • 事务机制
  • 消息确认机制
  • 延迟队列
  • 死信队列
  • 集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值