概述 RabbitMQ有几个重要的概念:虚拟主机,交换机,队列和绑定 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定,我们可以从虚拟主机层面的颗粒度进行权限控制 交换机:Exchange用于转发消息,...如果需要将普通队列转换成惰性队列需要将原来的队列删除,重新创建个惰性队列绑定。 ? 1.7....不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定。...arguments : 额外参数,目前只有个alternate-exchange,表示当生产者发送消息到这个交换机,路由不到该交换机的队列,则会尝试这个参数指定的交换机进行路由,若路由键匹配,则路由到alternate-exchange...指定的队列,相当于转发了,刚好和上一个参数internal配合,若不想本交换机起到路由队列的作用,可以设置internal为true,把消息都转发到alternate-exchange指定的交换机,由该交换机来路由指定队列
前言 本文介绍RabbitMq各个消息类型,以及用使用Fanout 类型进行消息的发送和消费,让大家对RabbitMq有一个简单的认识。...需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。...,相比Direct类型来说就放宽了命中的队列,对Direct 类型进行了扩展。 其中'*'表示仅匹配一个单词, '#'则表示匹配零个或一个和或者多个单词。...Headers exchange Headers方式是在绑定对列的时候将匹配的条件以字典型数据当参数传入,然后在生产的时候再将要匹配的条件以字典型数据当参数传入来进行匹配。...既然Spring已经为我们封装好了API 那我们就用他们封装的,省的自己还要创建连接和信道,代码好多,好烦,如果有个性化设置需要自己设置参数的,以后的章节我们会介绍。
默认情况下RabbitMQ的交换机以”all or nothing”方式工作,即:如果路由key与绑定到交换机的一组队列匹配,则RabbitMQ将将消息路由到该集合中的所有队列。...安装插件后,您可以通过设置与交换名称匹配的策略来定义交换分片。...因此,如果希望队列A接收路由消息是队列B接收路由消息的两倍,那么需要将队列A绑定到Exchange的绑定Key(字符串的数字)设置为队列B的绑定Key的2倍。...根据是否设置不等待,RabbitMQ Broker可以通过confirm.select-ok进行回复。一旦在通道上使用了confirm.select方法,就被认为处于确认模式。...在我们的部署架构中,ELB与RabbitMQ之间就是通过此机制来判断服务是否存活,是否提示生产者服务端已挂,异步等待confirm的消息直接进入unconfirm的处理环节。
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。 Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。...语言的一部分,包含了很多基于Erlang开发的中间件及工具库,安装RabbitMQ需 要安装Erlang/OTP,并保持版本匹配,如下图: RabbitMQ的下载地址:http://www.rabbitmq.com...‐‐此版本与spring boot 1.5.9版本匹配‐‐> org.springframework.boot...(); /*** 声明队列,如果Rabbit中没有此队列将自动创建 * param1:队列名称 * param2:是否持久化 * param3:队列是否独占此连接 * param4:队列不再使用时是否自动删除此队列...String queue, boolean autoAck,Consumer callback * 参数明细 * 1、队列名称 * 2、是否自动回复,设置为true为表示消息接收到自动向mq回复接收到了
持久化可以将交换器存盘,在服务器重启的时候不会丢失相关信息 autoDelete 与这个Exchange绑定的Queue或Exchange都与此解绑时,会删除本交换器 internal 设置是否内置,true...发送到该交换机的消息都会路由到与该交换机绑定的所有队列上,可以用来做广播 不处理路由键,只需要简单的将队列绑定到交换机上 Fanout交换机转发消息是最快的 Direct Exchage ?...Headers Exchange headers类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送消息内容中的headers属性进行匹配。...,之后所有与这个连接的消费者都断开时,才会自动删除 arguments 设置队列的其他参数,如x-message-ttl,x-max-length arguments中可以设置的队列的常见参数如下 参数名...fanout 发送到该交换机的消息都会路由到与该交换机绑定的所有队列上,可以用来做广播 direct 把消息路由到BindingKey和RoutingKey完全匹配的队列中 topic topic和direct
在rabbitMQ中,信息流从你的应用程序出发,来到Rabbitmq的队列,所有信息可以只存储在一个队列中。队列可以存储很多信息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。...三种常用的交换器类型 1. direct(发布与订阅 完全匹配) 2. fanout(广播) 3. topic(主题,规则匹配) Binding 绑定。用于消息队列和交换器之间的关联。...消息发送到MQ服务器时,消息将拥有一个路由键,即便是空的,RabbitMQ也会将其和绑定使用的路由键进行匹配。 如果相匹配,消息将会投递到该队列。 如果不匹配,消息将会进入黑洞。...交换器和队列的关系 交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由 键跟队列和交换器的路由键匹配,那么消息就会被路由到该绑定的队列中。...也就是说,消息到队列的过程中,消息首先会经过交换器,接下来交换器在通过路由键匹配分发消息到具体的队列中。路由键可以理解为匹配的规则。 RabbitMQ为什么需要信道?
(需要配置) 消息不能被交换机转发到队列中时, 会触发回调事件ReturnCallback(需要配置) Exchange 交换器 Fanout 把所有发送到该交换器的消息路由到所有与该交换器绑定的消息队列中...你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。...Fanout交换机转发消息是最快的 Direct 把消息路由到BingingKey 和RoutingKey 完全匹配的队列中 会把消息路由到BindingKey 和RoutingKey 完全匹配的队列中...在绑定队列和交换器时指定一组键值对,当发送的消息到交换器时,RabbitMQ会获取到该消息的headers,对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果匹配,消息就会路由到该队列。...第2, 3种, 都可以通过设置参数, 将消息重新放回到队列中 TTL 时间范围 0 <= n <= 2^32-1 ms, 约 49 天 死信队列 可以和TTL配合实现延时队列 将消息设置ttl, 发送到死信队列中
设置防火墙 3. RabbitMQ 基本配置 ---- RabbitMQ 端口 RabbitMQ 会绑定一些端口,安装完后,需要将这些端口添加至防火墙。...Binding Binding:绑定,RabbitMQ 中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey),这样 RabbitMQ 就知道如何正确地将消息路由到队列了...fanout fanout:扇形交换机 它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。 ?...与 direct 类似,但它可以通过通配符进行模糊匹配。 ? headers headers:头交换机。...生产者声明一个交换器,并设置相关属性,比如交换机类型,是否持久化等。 生产者声明一个队列并设置相关属性,比如是否排他、是否持久化、是否自动删除等。 生产者通过路由键将交换器和队列绑定起来。
RabbitMQ官方地址:http://www.rabbitmq.com/ 开发中消息队列通常有如下应用场景: 任务异步处理 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。...3)publish/subscribe 需要设置队列和交换机的绑定,work queues 不需要设置,实质上work queues 会将队列绑定到默认的交换机 。...Header 模式 header 模式与 routing 不同的地方在于,header 模式取消 routing key,使用 header中的 key/value(键值对)匹配 队列。.../spring-amqp 在我们之前创建得生产者模块中进行构建,添加如下依赖,注释掉之前原生的 rabbitmq 依赖 <!
中的交换器也是如此,它会将消息分发给某个消息队列, 交换器与消息队列之间也有着绑定关系,当路由键与某个绑定关系匹配时,交换器将会把消息分发给指定的消息队列。...topic headers 其中direct指的是直接交换器,它会根据消息中的路由键进行精确匹配,将消息交给匹配到的某个消息队列;fanout是扇出交换器,它不会处理路由键,而是将消息交给与该交换器绑定的所有消息队列...等的消息都会由交换器交给该消息队列;headers是首部交换器,它也不会处理路由键,而是通过消息中的消息头与接收消息时的请求头进行匹配。...交换器创建好后,必须与消息队列进行绑定才能正常工作,所以还需要创建消息队列: 若是消息队列设置了自动删除为Yes,则当没有任何客户端监听该消息队列时会被自动删除。...交换器和消息队列都准备就绪,接下来就需要为二者建立绑定关系,点击进入新创建的交换器: 设置绑定关系: 此时在指定的交换器下可以发送消息: 直接交换器会根据路由键进行精确匹配,当消息中的路由键和交换器与消息队列绑定关系中的路由键完全一致时
RabbitAdmin类可以很好的操作RabbitMQ,在Spring中直接进行注入即可。注意,autoStartup必须设置为true,否则Spring容器不会加载RabbitAdmin类。...RabbitAdmin底层实现就是从Spring容器中获取Exchange交换机、Binding绑定、RoutingKey路由键以及Queue队列的@Bean声明。 ...2、由于使用的maven工程配合了Springboot整合Spring与RabbitMQ的知识。所以先引入依赖包,如下所示: 1 <?...同样我们需要进行注入到Spring容器中,然后直接使用。在与Spring整合的时候需要实例化,但是在与SpringBoot整合的时候,在配置文件里面添加配置即可。...很多基于RabbitMQ的自制定化后端控制台在进行动态设置的时候,也是根据这一特性实现的。
) * exclusive :队列是否独占此连接,队列只允许在该连接中访问,如果connection连接关闭队列则自动删除,如果将此参数设置true可用于临时队列的创建...) * exclusive :队列是否独占此连接,队列只允许在该连接中访问,如果connection连接关闭队列则自动删除,如果将此参数设置true可用于临时队列的创建...消费者 再绑定队列和交换器时制定一组键值对 发送消息时候,提供:发送消息 和 要匹配的map RabbitMQ会获取到该消息的headers, 对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对...用户购买商品,产生订单;修改Radis 中库存…等操作… 订单存在一个 死信队列中,并设置了过期时间 但并不会消费… 一段时间过后,消息发送到死信队列中… 进行消费, 判断订单是否支付,未支付订单,将Radis...* * @param exchange 指定交换机 @Qualifier注解根据参数名进行匹配Spring映射! * @param queue 指定队列!
6.Exchange接收到消息后,就根据消息的key和已经设置的Binding,进行消息路由,将消息投递到一个或多个队列里。...如果Routing key匹配, 那么Message就会被传递到相应的queue中。其实在queue创建时,它会自动的以queue的名字作为routing key来绑定那个exchange。...它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列。 Topic exchange:对key进行模式匹配后进行投递的叫做Topic交换机。...RabbitAdmin配置 RabbitAdmin是用于对交换机和队列进行管理,用于创建、绑定、删除队列与交换机,发送消息的组件。...队列消息变成死信(deadmessage)之后,它能被重新被发送到另一个交换器中,这个交换器就是DLX,绑定DLX的队列就称之为死信队列。
我们本章先来讲解DirectExchange路由键方式,根据设置的路由键的值进行完全匹配时转发,下面我们来看一张图,形象的介绍了转发消息匹配流程,如下图所示: ?...DirectExchange 我们可以看到上图,当消息被提供者发送到RabbitMQ后,会根据配置队列的交换以及绑定实例进行转发消息,上图只会将消息转发路由键为KEY的队列消费者对应的实现方法逻辑中,从而完成消息的消费过程...return new Queue(QueueEnum.USER_REGISTER.getName(),true); } /** * 将用户注册队列绑定到路由交换配置上并设置指定路由键进行转发...配置队列实例 配置Queue实例对象,为消息队列设置一个名称,引用QueueEnum枚举配置的队列名称,当然队列的名称同样也是提供者与消费者之间的通讯基础。...绑定队列实例到交换实例 配置Binding实例对象,消息绑定的目的就是将Queue实例绑定到Exchange上,并且通过设置的路由Key进行消息转发,配置了路由Key后,只有符合该路由配置的消息才会被转发到绑定交换上的消息队列
Pub/Sub 订阅模式 :一个生产者生产消息发送到交换机里面,由交换机处理消息,队列与交换机的任意绑定,将消息指派给某个队列,一个或者多个消费者从队列里面拿消息,进行消费消息。...需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。...Routing 路由模式:一个生产者生产消息发送到交换机里面,并且指定一个路由key,队列与交换机的绑定是通过路由key进行绑定的,消费者在消费的时候需要根据路由key从交换机里面拿消息,进行消费消息。...Topics 通配符模式:一个生产者生产消息发送到交换机里面,并且使用通配符的形式(类似mysql里面的模糊查询,比如想获取一批带有item前缀的数据),队列与交换机的绑定是通过通配符进行绑定的,消费者在消费的时候需要根据根据通配符从交换机里面拿消息...单位:ms(毫秒),当该消息在队列头部时(消费时),会单独判断这一消息是否过期。 如果两者都进行了设置,以时间短的为准。
这里是用Go写的发送端示程序例。 消息队列:即 RabbitMQ 内部的队列,它安装在一个服务器中。做为消息中间件,它与具体开发语言无关,支持 Go,Java等接入连接。...Spring AMQP 的特征 用于异步处理入站消息的侦听器容器 RabbitTemplate 用于发送和接收消息 RabbitAdmin 用于自动声明队列、交换和绑定 3....,而“绑定”是个“ 队列+交换机”关联关系。...考虑两种失败情况: 发消息到不存在的交换机。 发消息到交换机,但没有匹配的队列。 第一种情况的场景是 指定了 错误的交换机名称。 第二种情况的场景是 “发送者的退货” 。..., cause=%s", id, cause)); } } }; } 上面的 ack 参数 指示了是否投递(到交换机)成功。
---- Pub/Sub 订阅模式 :一个生产者生产消息发送到交换机里面,由交换机处理消息,队列与交换机的任意绑定,将消息指派给某个队列,一个或者多个消费者从队列里面拿消息,进行消费消息。...需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。...---- Routing 路由模式:一个生产者生产消息发送到交换机里面,并且指定一个路由key,队列与交换机的绑定是通过路由key进行绑定的,消费者在消费的时候需要根据路由key从交换机里面拿消息,进行消费消息...---- Topics 通配符模式:一个生产者生产消息发送到交换机里面,并且使用通配符的形式(类似mysql里面的模糊查询,比如想获取一批带有item前缀的数据),队列与交换机的绑定是通过通配符进行绑定的...单位:ms(毫秒),当该消息在队列头部时(消费时),会单独判断这一消息是否过期。 如果两者都进行了设置,以时间短的为准。
交换器介绍 RabbitMQ中有三种主要的交互器分别如下 交换器 说明 direct 发布与订阅 完全匹配 fanout 广播 topic 主体,规则匹配 direct案例 DirectExchange...路由策略是将消息队列绑定到 DirectExchange 上,当 一条消息到达DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为“hello-queue... 1.2参数设置 在application.properties中添加如下配置信息 spring.application.name...=dpb spring.rabbitmq.password=123 #设置交换器的名称 mq.config.exchange=log.direct #info 队列名称 mq.config.queue.info...* @QueueBinding value:绑定队列的名称 * exchange:配置交换器 * * @Queue value:配置队列名称 * autoDelete:是否是一个可删除的临时队列
它有监听单个或多个队列、自动启动、自动声明功能。 设置事务特性、事务管理器、事务属性、事务并发、是否开启事务、回滚消息等。...但是我们在实际生产中,很少使用事务,基本都是采用补偿机制 设置消费者数量、最小最大数量、批量消费 设置消息确认和自动确认模式、是否重回队列、异常捕获 Handler 函数 设置消费者标签生成策略、是否独占模式...,我们可以看出使用MessageListenerAdapter处理器进行消息队列监听处理 如果容器没有设置setDefaultListenerMethod 则处理器中默认的处理方法名是handleMessage...如果设置了setDefaultListenerMethod 则处理器中处理消息的方法名就是setDefaultListenerMethod方法参数设置的值 也可以通过setQueueOrTagToMethodName...,您应该熟悉以下核心概念 目标绑定器 提供与外部消息传递系统集成的组件 目标绑定 外部消息传递系统和应用程序之间的桥接提供的生产者和消费者消息(由目标绑定器创建) 消息 生产者和消费者用于与目标绑定器
领取专属 10元无门槛券
手把手带您无忧上云