RabbitMQ的各部分理解和设置?(三)

版权声明:禁止转载 https://blog.csdn.net/qq_36505948/article/details/82758290

一、引入

在一、二篇中分别介绍了Erlang和MQ的安装,和RabbitMQ的基本使用(原理,基础机制),那么每一部分在明细中应该如何理解呢?

本篇进一步入门?

二、分模块介绍?

我们知道一个MQ的流程是:生产者---->交换机------>消息队列------>消费者。 那么在这么一个流程中生产者我们可以理解为产出消息的和发送消息的,那么交换机,队列,分别起什么作用呢?

那么怎么去比较清楚地理解交换器呢?

  我们可以从其作用,其设置的位置(申报的位置),在哪个环节被使用来干什么 ,这些点来进行分析~

交换机的核心功能是:接受来自生产者消息发给队列
位置:在生产者和消费者端同时申报
模式:直联(direct),主题(topic),标题(headers),分发(fanout)
设置:channel.exchangeDeclare("logs", "fanout"); ,一般在生产者和消费者两端都设置
命令:Linux下查找服务器可用的交换器rabbitmqctl list_exchanges
推送消息往交换器:channel.basicPublish( "logs", "", null, message.getBytes());
============================================================================================
logs的位置也即是指交换器的名称,一般可以在客户端指定,如果无指定,则MQ默认创建系统底层的名字为空字符串的交换器

以上为交换器的基本参数信息,在配置中为基本的信息,详细可以参考(二)中提供的基本模板!


怎么将交换器与队列相关联呢?

  生产者与交换器之间是通过路由键来关联的,而交换器与队列之间则是通过绑定键来实现绑定的~~~~

模式1:对于正常的队列,我们使用的是直接声明指定,默认绑定

模式2:

channel.queueBind(queueName, EXCHANGE_NAME, "");获取完队列后,可以执行与交换器进行绑定。类似于观察者模糊中,女神作为热点总是被一大堆屌丝关注,在这里交换机就是女神,而队列就是屌丝。
==================================================================================================================
EXCHANGE_NAME:交换器名
"" 这个字段是用于命名当前绑定关系中队列与该交换机的关系,被称为路由,路由可以命名,也可以忽略,使用路由键是为了避免所有队列都征用一个键,所有消息都跑到一个队列的冲突,但是同时我们又允许多个队列以相同的路由键绑定到同一个交换器中,我们称之为多重绑定,多种绑定会形成一种类似分发模式的现象。绑定关系中使用的路由键是否有效取决于交换器的类型,当模式为fanout[全局分发]模式的时候,该路由键会被忽略!
queueName为临时申请到的临时队列

  关于正常模式下的声明队列~~~

String queueName = channel.queueDeclare().getQueue();//指定创建用于接收数据的临时队列,需要执行绑定
channel.queueBind(queueName, EXCHANGE_NAME, ""); 获取完队列后,可以执行与交换器进行绑定
------------------------------------------------------------------------------------------------------------------
或者(二选一)
channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);//持久化现有的队列,不用执行绑定,声明要关注的队列

通过上面,我们知道交换器的一些参数设置,可以理解为:

从工厂中获取连接-------->从连接中获取渠道-------->从渠道中声明某种类型的交换机------->发送消息或者绑定队列

关于绑定的方法和两种方式我们已经简单说明,结合基本模板可以理解,那么在什么样的场景下应该如何做什么绑定呢?

fanout模式下的交换器会集体广播任务信息,将所有基本的信息都发送出来。但如果我们的消息分为多个级别,在生产环境中为了避免资源浪费,项目中大多是只会将需要的部分打印出来或者分开打印。如果我们想要实现在按等级接受任务信息或者接受某个级别以上任务信息,就需要使用direct直连接模式的交换器。


(1):生产者声明交换器后,以队列名作为路由键进行发送数据

(2):消费者按照不同的路由键将队列与交换器进行绑定

(3):按照渠道,分别处理:

 (4):最后可以实现如下,按照不同级别将数据分类处理或者按照不同级别划分,但是只处理某几个级别~


三、能模糊匹配路由键的topIC模式

TOPIC模式也是MQ中交换器的一种模式,按照相似主体进行队列识别,说白了也就是模糊匹配路由键来达到识别队列的功能!

(1):TOPIC模式主要有以下几个细节:

1.topic模式下的交换器允许不同的路由键来模糊匹配自己的发送队列
2.路由键的长度设置不能超过255个字节(Byte)
3.路由键中 【* 表示一个单词】,【# 号表示零个或者多个单词】
4.topic模式下是实现对路由键的模糊匹配,而不是消息内容的模糊匹配
5.如果消费者端的路由关键字中没有【#】或者【*】,它就变成直连【direct】模式来工作
6.一般路由关键字是以【xxxxx1.xxxxx2.xxxx3】的 方式来连接的,其中xxxx1、xxxx2、xxxxx3分别表示单词

(2):TOPIC模式的核心代码:

生产者:

消费者: 

利用绑定方法,将自己想要的路由键的匹配规则给传进去,可以实现绑定!



 

猜你喜欢

转载自blog.csdn.net/qq_36505948/article/details/82758290
今日推荐