首页 > 其他分享 >rabbitmq

rabbitmq

时间:2023-05-28 15:22:26浏览次数:55  
标签:Exchange 队列 绑定 rabbitmq 交换机 消息 路由

什么是rabbitmq

mq全文Message Queue,中文为消息队列,消息队列是一种搞笑的异步通信机制,消息存储在队列里,可以让应用程序进行松耦合的通信,而rabbitmq是一种流行的开源消息队列软件,支持多种语言。
rabbitmq基本组成部分包含生产者、消费者、交换机、队列;生产者把消息发送到交换机,消费者监听队列,交换机是个路由器,他根据路由键把消息发送给指定的队列,队列是消息的存储库,每个队列都有一个名字,并且可以有多个消费者订阅他。

相关概念

标志 中文名 英文名 描述
p 生产者 producer 也叫发送方,负责把消费发送给交换机
c 消费者 consumer 也叫接收方,负责消费队列里的消息
x 交换机 exchange 也叫路由器,根据路由键把消息发送给队列
q 队列 queue 也叫存储库,绑定交换机,负责存储生产者发送的消息

交换机主要有以下几种:

  • Direct Exchange:是一种最简单,最常见的Exchange类型,他根据消息的Routing key将消息路由到与之完全匹配的队列中,Routing key必须是一个字符串,同时也必须在对应的Queue绑定时指定。
  • Fanout Exchange:将从Exchange接受到的消息广播到与之绑定的所有队列中,他忽略Routing key,只需将消息发送到与之绑定的所有队列即可,既发布订阅模式。
  • Topic Exchange:是一个更加灵活的Exchange类型,他可以使用通配符将消息路由到多个Queue中。
  • Headers Exchange: 使用消息头中的键值对来进行匹配,性能比其他类型的 Exchange 要差,因此一般情况下会尽可能避免使用它。

除了上面主要几种,还有一种经常被大家忽视的概念Default exchange binding,在RabbitMQ中,如果一个消息发送到Exchange中没有任何任务的规则,那么这个消息就会路由到名为Default exchange binding的默认Exchange中。这个默认 Exchange 的名称为“”(空字符串),也称为 AMQP default exchange。
默认情况下,每个Queue都会与默认Exchange绑定,绑定规则为将Queue的名称作为Routing key,意味着,如果发布消息不指定Exchange的名称,也就是不指定Direct Exchange或者Fanout Exchange,那么就会发送到默认的Exchange中,并根据Routing key路由到与之同名的Queue中。

用rabbitmq有什么好处

对比同种类型的产品

rabbitmq基本使用

高级特性和应用案例

疑问点?

  1. 在 RabbitMQ 中,是队列绑定交换机,还是交换机绑定队列?
    在 RabbitMQ 中,队列绑定到交换机上,而不是交换机绑定到队列上。这是因为 RabbitMQ 的消息路由模型是基于 Exchange - Queue 绑定实现的。

具体来说,当我们在 RabbitMQ 中创建一个队列时,该队列默认不会自动与任何 Exchange 进行绑定。如果我们想要将某个队列与一个 Exchange 进行绑定,需要创建一个 Binding(即绑定关系),用于将 Exchange 和 Queue 连接起来。

Binding 有三个必填参数,分别为 Destination(目标队列名)、Source(源 Exchange 名称)以及 Routing Key。其中 Destination 指的是队列名称,Source 指的是 Exchange 名称,而 Routing Key 则用于标识消息应该路由到哪个队列中。

在创建 Binding 时,也可以指定一些可选参数,如 Arguments。Arguments 是一个键-值对集合,可以被用来配置和控制 RabbitMQ 的各种行为,比如消息的过期时间、队列的最大长度、死信路由等。通过配置这些参数,我们可以更好地控制 RabbitMQ 在消息路由和处理方面的行为。

总之,在 RabbitMQ 中,由于消息是从 Exchange 发布并路由到队列中,所以我们需要先将队列绑定到 Exchange 上,才能够确保消息能够被正确地路由到目标队列中。

标签:Exchange,队列,绑定,rabbitmq,交换机,消息,路由
From: https://www.cnblogs.com/kangyu222/p/17438197.html

相关文章

  • RabbitMQ系列-Exchange介绍
    RabbitMQ系列RabbitMQ系列-概念及安装   1.ExchangeRabbitMQ系列-概念及安装提到AMQP0-9-1协议默认支持四种exchange,分别是DirectExchange,FanoutExchange,TopicExchange,HeadersExchange除了交换类型之外,交换还声明了许多属性Name,交换机名称,唯一的Durability,持久......
  • 【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令
    这个需求为控制智能家居工作,把控制智能家居的操作指令发到队列中,比如:扫地机、洗衣机到指定时间工作 一.什么是延迟队列?延迟队列存储的对象是对应的延迟消息,所谓“延迟消息”是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费......
  • RabbitMQ---死信交换机
    什么是死信交换机?要先解释一下什么是死信:当一个队列中的消息满足下列情况之一。就可称为死信。消费者使用basic.reject或basic.nack声明消费失败,并且消息的requeue参数设置为false消息是一个过期消息,超时无人消费要投递的队列消息满了,无法投递如果这个包含死信的队列配置了......
  • windows安装RabbitMQ及出现问题处理方法
    一、安装准备工具1.下载Eralng,下面链接已提供otp_win64_20.2.exe链接:https://pan.baidu.com/s/1lmvCMPVAV1Ba9UogCdQpZg提取码:x9m7注意:有32位版本 otp_win32_21.3.exe 根据win系统而定2.下载rabbitmq,下面链接已提供rabbitmq-server-3.7.4.exe链接:https://pan.baidu.com/s/1......
  • 看完这篇文章,rabbitmq终于安装起来了!
    文章目录1、下载2、启动3、注意事项1、下载rabbitmq下载地址:http://www.rabbitmq.com/download.htmlErlang下载地址:http://erlang.org/download/otp_win64_22.1.exe先安装erlang,再安装rabbimq。不出意外的话安装是很顺利的。2、启动点击这个启动rabbtimq。再找到这个进入......
  • RabbitMQ的消息可靠性
    RabbitMQ如何保证消息可靠性?1.开启生产者确认机制,确保生产者的消息能到达队列。2.开启持久化功能,确保消息未消费前在队列中不会丢失。3.开启消费者确认机制为auto,由Spring确认消息处理成功后完成ack。4.开启消费者失败重试机制,并设置MessageRecoverer,多次重试失败后将消息投递......
  • rabbitmq中的queueDeclare方法
    queueDeclareQueue.DeclareOkqueueDeclare()throwsIOException;/***Declareaqueue*@seecom.rabbitmq.client.AMQP.Queue.Declare*@seecom.rabbitmq.client.AMQP.Queue.DeclareOk*@paramqueuethenameofthequeue*@param......
  • RabbitMQ消费消息方法basicConsume
    RabbitMQ-消费消息 Address[]addresses=newAddress[]{newAddress(IP_ADDRESS,PORT)};/***1.建立连接工厂*/ConnectionFactoryconnectionFactory=newConnectionFactory();connectionFactory.setUsername(USER_NAME);......
  • RabbitMQ之消息确认机制
    RabbitMQ之消息确认机制标签(空格分隔):php,rabbitmq在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话......
  • docker安装rabbitMQ
    输入命令dockerpullrabbitmq:3.7.7-management  设置账号和密码dockerrun-d--namerabbitmq3.7.7-p5672:5672-p15672:15672-v`pwd`/data:/var/lib/rabbitmq--hostnamemyRabbit-eRABBITMQ_DEFAULT_VHOST=my_vhost-eRABBITMQ_DEFAULT_USER=admin-eRABBITM......