首页 > 其他分享 >RabbitMQ

RabbitMQ

时间:2024-03-07 16:59:05浏览次数:15  
标签:队列 模式 死信 RabbitMQ TTL 路由 消息

一、组件

   

 

二、6种工作模式

       HolloWord、WorkQueues、Publish/Subscribe、Routing、Topic、RPC。

       2.1、HolloWord模式

             

               该模式不会用到交换机,实际工作场景也不会用到,只是简单的消息的生产和消费。

       2.2、WorkQueues 工作队列模式

            

               【说明】:工作队列会发送一些耗时任务给多个工作者(worker)。在多个消息的情况下,Work Queue会将消息分派给不听的消费者,每个消费者都会接收到不同的消息,并且可以根据处理消息的速度来接收消息的数量,进而让消费者程序发挥最大性能。

               Work Queue特别适合在集群环境中做异步处理,能最大程度发挥每一台服务器的性能。

               【应用场景】:

                      

 

      2.3、Publish/Subscribe 发布/订阅模式

           

              【说明】:该模式中,生产者不再直接与队列绑定,而是将数据发送到交换机(x:Exchange),交换机用于将数据按某种规则送入与之绑定的队列,进而供消费者使用。该模式下,将换季无差别的将所有的消息送入与之绑定的队列,所有消费者拿到的消息完全相同。

               【应用场景】:国家气象局发送的天气预报,不同的门户网站订阅天气消息的场景。但是如果北京电视台没有拿到南京的授权,还想获得数据,就不能用该模式,因为发布订阅模式的所有数据都是相同且完整的,而应该用路由模式。

     2.4、Routing 路由模式        

              

             【说明】:该模式是发布订阅模式的变种,发布订阅是无条件将所有消息发送给所有的消费者。路由模式是交换机根据Routing Key有条件的将数据筛选后发送给消费者队列。

             【应用场景】:日志收集。将error的错误日志,打上标记为type=direct,交换机就会将error的数据单独放在特殊队列中,再由独立的消费者消费。比如死信队列。

     2.5、Topic 主题模式           

      

            【说明】:主题模式是在Routing模式上,提供了对RouteKey模糊匹配的功能,可以简化程序的编写。模糊匹配表达式规则如下:

                              1、 * 匹配单个关键字

                              2、 # 匹配所有关键字

                            路由模式是精准匹配,主题模式是模糊匹配,实际应用中,执行效率肯定是精准匹配效率高,故而实际应用中,能用路由模式,就不要使用主题模式。
            【应用场景】:

     2.6、RPC 远程调用模式

              RPC同步通信

            

             【说明】:实际工作中几乎用不到,因为有太多的专用工具比它做得好,比如Bubbo。

三、MQ消息积压        

       3.1、最简单的办法:RebbitMQ改为工作队列模式,就是负载均衡,堆机器。                 

      3.2、死信队列

            

              依赖RabbitMQ的死信队列特性,将死信消息自动送达死信队列中,BS前台接收死信消息,1小时候重新发送,等待闲时由信审系统进行处理。如此实现了在不增加资源的前提下,对信审系统资源“削峰填谷”。接受到的死信消息,将保存到死信消息表,1小时候重新发送。

           【扩展】:死信队列

                          死信:过期或无法处理的消息;

                          死信的产生:

      1. 消费者拒绝接受,且没有重新入列的消息;
      2. 队列满了,无法入列的消息;
      3. 消息设置了TTL过期时间,超过有效时间后的消息;
      4. 队列设置了TTL过期时间,超过有效时间后的消息。

                         消息和队列TTL都过期,以谁为准呢?以TTL时间短的为准。

死信队列配置界面,采用路由模式,TTL时间设置为10秒=10000ms

                 

 四、集群
        RebbitMQ基于Erlang编写,Erlang天生具备分布式特性(通过Erlang集群节点的cookie实现)。RebbitMQ不需要如kafka那样通过Zookeeper来实现HA方案和集群数据持久化。

        可以参考:消息中间件—RabbitMQ(集群原理与搭建篇) (qq.com)

 

标签:队列,模式,死信,RabbitMQ,TTL,路由,消息
From: https://www.cnblogs.com/xiaobaicai12138/p/17853063.html

相关文章

  • 开源.NET8.0小项目伪微服务框架(分布式、EFCore、Redis、RabbitMQ、Mysql等)
    1、前言为什么说是伪微服务框架,常见微服务框架可能还包括服务容错、服务间的通信、服务追踪和监控、服务注册和发现等等,而我这里为了在使用中的更简单,将很多东西进行了简化或者省略了。年前到现在在开发一个新的小项目,刚好项目最初的很多功能是比较通用的,所以就想着将这些功能抽......
  • 利用SpringAMQP依赖使用RabbitMQ
    消息消费端和提供端需要引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>都需要在application.yml进行如下配置spring:rabbitmq:host:192.168.230.100#r......
  • Centos 安装RabbitMQ
    一、步骤   【步骤一】:更新软件包的存储库。yum-yupdate   【步骤二】:Erlang在默认的YUM存储库中不可用,因此您将需要安装EPEL存储库yum-yinstallepel-releaseyum-yupdate   【步骤三】:RabbitMQ是基于Erlang(面向高并发的语言)语言开发,所以在安装Ra......
  • 消息中间件RabbitMQ的原理和使用
    一、什么是MQMQ是MessageQueue的简写,表示消息队列的意思,它是一种用于在应用程序之间传递消息的技术。多用于分布式系统之间进行通信,作为消息中间件使用。MQ的作用有应用解耦、异步提速、流量削峰填谷,当然也有缺点,加入MQ消息中间件会额外增加系统的外部依赖,是系统稳定性降低,同......
  • docker安装Rabbitmq
    搜索rabbitmq镜像dockersearchrabbitmq默认拉取最新版本镜像dockerpullrabbitmq创建并运行rabbitmq容器dockerrun-d--hostnamemy-rabbit--namemy-rabbit-p15672:15672-p5673:5672rabbitmq-d:该选项表示在后台(detachedmode)运行Docker容器,即启动一个守护......
  • ubuntu安装rabbitmq
    安装所需软件包sudoapt-getinstallwgetapt-transport-https-y添加密钥,整个一起复制curl-1sLf"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA"|sudogpg--dearmor|sudotee/usr/share/keyrings/com.rabbitmq.tea......
  • RabbitMQ部署
    拉取RabbitMQ镜像,启动容器dockerpullrabbitmq:3-managementdockerrun\-eRABBITMQ_DEFAULT_USER=root\#设置环境变量,账号,密码-eRABBITMQ_DEFAULT_PASS=123\--namemq\#起名--hostnamemq1\#配置主机名,集群部署时候有用,非集群部署可不配-p15672:15672\#......
  • Spring Boot整合RabbitMQ
    目录简述自定义消息转换器rabbitmq配置说明生产者重连生产者确认机制Return机制Confirm机制小结消费者确认机制消费者失败重试机制失败消息处理策略RabbitMQ整合引入spring-boot-starter-amqp依赖application.yml配置启动类添加启动注解MQ配置(队列、交换机声明)动态创建队列与交......
  • Linux安装Docker并搭建MySql、Redis、RabbitMQ
    1.1安装docker(1)删除老版本sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\......
  • RabbitMQ、RocketMQ、Kafka区别
    引言1、队列应用场景:MQ(MessageQueue,消息队列)消息队列在实际应用中常用的使用场景(优点):异步处理,应用解耦,流量削锋和消息通讯四个场景。2、目前使用较多的消息队列:有老牌的ActiveMQ、RabbitMQ,ZeroMQ,炙手可热的Kafka,MetaMQ,阿里巴巴的RocketMQ。3、如何选型(目前现状):......