码迷,mamicode.com
首页 > 其他好文 > 详细

RabbitMQ-1

时间:2020-07-03 00:37:23      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:alt   produce   消息发送   使用   存储   对象   不同的   style   结构   

前言

RabbitMQ是基于AMQP协议(Advanced Message Queue Protocol)的消息中间件

 

什么是消息队列

      消息队列属于进程间通信的一种方式,使用消息队列可以通过异步方式处理数据,借此可以提高系统性能。我们可以把消息当作存放数据的容器,消息的消费者可以从队列中获取数据,进行处理。常见的消息队列有:ActiveMQ,RabbitMQ,Kafka,RocketMQ等。

 

下图为生产者发送消息到rabbitMq 最终消息被消费者的流程图

技术图片

一  各角色介绍

1  生产者
Producer: 生产者,就是投递消息的一方。
生产者创建消息,然后发布到 RabbitMQ 中。消息一般可以包含 2 个部分:消息体和标签 (Label)。消息体也可以称之为 payload ,在实际应用中,消 息体一般是一个带有业务逻辑结构 的数据,比如一个 JSON 字符串。当然可以进一步对这个消息体进行序列化操作。消息的标签用来表述这条消息 , 比如 一个交换器的名称和一个路由键 。 生产者把消息交由 RabbitMQ , RabbitMQ 之后会根据标签把消息发送给感兴趣的消费者(Consumer ) 。

2 消费者
Consumer: 消费者 ,就是接收消息的一方。
消费者连接到 RabbitMQ 服务器,并订阅到队列上 。当消费者消费一 条消息时 ,只是消费消息的消息体(payload )。在消息路由的过程中 ,消息的标签会丢弃 ,存入到队列中的消息只有消息体,消费者也只会消费到消息体 ,也就不知道消息的生产者是谁,当然消费者也不需要知道 。

3  队列
Queue: 队列,是 RabbitMQ 的内部对象,用 于存储消息。

技术图片

4   交换器,

Exchange: 交换器。在上图中我们暂时可以理解成生产者将消息投递到队列中,实际上 这个在 RabbitMQ 中不会发生。真实情况是,生产者将消息发送到 Exchange (交换器),由交换器将消息路由到一个或者多个队列中。如果路由不到,或 许会返回给生产者,或许直接丢弃。这里可以将 RabbitMQ 中的交换器看作一个简单的实体。

RabbitMQ 中的 交换器有四种类型,四种类型分别是 fanout、direct、topic 、headers,不同的类型有着不 同的路由策略。

 

4.1 Direct Exchange 

技术图片

 

 该类型的交换器路由规则也很简单,它会把消息路由到那些BindingKey 和 RoutingKey 完全匹配的队列中。

 

4.2   Fanous Exchange 

技术图片

 

 它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中,忽略routing key  类似ActiveMQ的Topic广播模式

 

4.3 Topic 

技术图片

         前面讲到 direct 类型的交换器路由规则是完全匹配 BindingKey和RoutingKey,但是这种严格的匹配方式在很多情况下不能满足实际业务的需求。topic类型的交换器在匹配规则上进行了扩展,它与 direct 类型的交换器相似,也是将消息路由到 BindingKey 和 RoutingKey 相匹配的队 列中,但这里的匹配规则有些不同,它约定:

BindingKey 中可以存在两种特殊的字符串 "*" 和 "#" , 用于模糊匹配,其中

"#"用于匹配一个单词, "*"用于匹配多个单个(可以是零个)。

com.itcast.client ,   com.itheima.exam   

如 com.#.exam  就匹配了  com.itheima.exam   

如 com.* 就匹配了 com.itcast.client 和 com.itheima.exam   

 

4.4  headers :

    该类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中 的 headers 属性进行匹配。

 

5  路由键
RoutingKey : 路由键
      生产者将消息发给交换器 的时候, 一般会指定 一个 RoutingKey ,用 来指定这个消息的路由规则,而这个 RoutingKey 需要与交换器类型和绑定键 (BindingKey) 联合使用才能最终生效。
在交换器类型和绑定键 (BindingKey) 固定的情况下,生产者可以在发送消息给交换器时, 通过指定 RoutingKey 来决定消息流向哪里。

6   绑定
Binding: 绑定。RabbitMQ 中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey) ,这样 RabbitMQ 就知道如何正确地将消息路由到队列了。

 

二 纯界面设置绑定队列和路由键

1  生产者发送消息

1.1 队列绑定


1.1.1 创建队列
在 RabbitMQ 的后台管理界面中创建一个队列 , 指定队列名称。

技术图片

 

1.1.2 创建交换器 Exchange

在 RabbitMQ 的后台管理界面中创建一个交换器,指定交换器的名称, 并且指定交换器类型。

技术图片

 

1.1.3 绑定队列与交换器

在交换器列表点击对应的交换器 , 进入到绑定界面 , 指定队列名称 queue , 指 定 RoutingKey,通过该 RoutingKey 来绑定该队列与交换器 Exchange 。

技术图片

 

之后,在发送消息时, 指定了 Exchange ,及 RoutingKey, 就可以将该消息路由 到该队列 queue 中。

技术图片

 

 代码实现发送和接收消息

 //todo

 

RabbitMQ-1

标签:alt   produce   消息发送   使用   存储   对象   不同的   style   结构   

原文地址:https://www.cnblogs.com/hup666/p/13227859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!