电子商务平台网站建造,重庆市建设工程信息网官网网址,河南建设工程信息网一体化,seo运营培训一、RabbitMQ的架构
RabbitMQ的架构可以查看官方地址 可以看出RabbitMQ中主要分为三个角色#xff1a;
Publisher#xff1a;消息的发布者#xff0c;将消息发布到RabbitMQ中的ExchangeRabbitMQ服务#xff1a;Exchange接收Publisher的消息#xff0c;并且根据Routes策…一、RabbitMQ的架构
RabbitMQ的架构可以查看官方地址 可以看出RabbitMQ中主要分为三个角色
Publisher消息的发布者将消息发布到RabbitMQ中的ExchangeRabbitMQ服务Exchange接收Publisher的消息并且根据Routes策略将消息转发到Queue中Consumer消息的消费者监听Queue中的消息并进行消费Routes就是我们下面说的 Routing Key
RabbitMQ发送消息的策略是消息到达Exchange然后根据 RoutingKey 去配置到 Queue然后消费者监听queue来完成消费
二、AMQP概念
RabbitMq是基于AMQP协议的。
1.什么是AMQP协议 server又称Broker,接收客户端连接实现AMQP实体服务Connection 连接应用程序与Broker的网络连接Channel网络信道几乎所有的操作都在Channel中进行Channel是进行消息读写的通道。客户端可建立多个Channel每个Channel代表一个会话任务。Virtual Host 虚拟地址用于进行逻辑隔离最上层的消息路由。一个Virtual host里面可以有若干个Exchange和Queue同一个Virtual host 里面不能有相同名称的Exchange或Queue可以理解为 Mysql中的 db概念不同的用户可以管理不同的 Virtual Host默认是 / 目录也可以在 管理页面上 创建 Virtual Host 并指定给相应的用户或者在命令行中创建和设置用户。ExChange交换机接收消息根据路由键转发消息到绑定的队列BindingExchange和Queue之间的虚拟连接binding中可以包含routing key(路由键)Routing key一个路由规则虚拟机可用它来确定如何路由一个特定消息Queue也称为Message Queue消息队列保存消息并将它们转发给消费者Message消息服务器和应用程序之间传送的数据由Properties和Body组成,Properties可以对消息进行修饰比如消息的优先级、延迟等高级特性Body则就是消息体内容
二、ExChange详解
Name交换机名称TypeRabbitMQ中交换机的类型有 direct直接 、topic主题、fanout广播、headers标题Durability交换机是否需要持久化true为持久化。Auto Delete当最好一个绑定到Exchange上的队列删除后自动删除Exchange。Internal当前Exchange是否用于RabbitMQ内部使用默认FalseArguments扩展参数用户扩展AMQP协议自制定化使用
三、Queue详解
name队列的名称durable是否是持久化队列autoDelete当最后一个消息不在了是否自动删除队列默认false。
三、RabbitMQ通讯的方式
RabbitMQ通讯方式 是依赖于 Exchange的类型的。
3.1 direct类型交换机
所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue
注意Direct模式可以使用RabbitMQ自带的Exchangedefault Exchange所以不需要将Exchange进行任何绑定操作消息传递时RouteKey必须完全匹配才会被队列接收否则该消息会被抛弃 注意Direct模式可以使用RabbitMQ自带的Exchangedefault Exchange所以不需要将Exchange进行任何绑定操作消息传递时RouteKey必须完全匹配才会被队列接收否则该消息会被抛弃 3.2 fanout类型交换机
不处理Routing Key只需要简单的将队列绑定到交换机上发送到交换机的消息都会被转发到与该交换机绑定的所有队列上Fanout交换机转发消息是最快的
3.3 topic类型交换机
所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上
Exchange将RouteKey和某个Topic进行模糊匹配此时队列需要绑定一个Topic 注意可以使用通配符进行模糊匹配 符号 # 匹配一个或多个词符号 * 只匹配一个词例如log.# 能够匹配到 log.info.a、log.info.c、log.infolog.* 只能匹配到 log.info 。 3.4 headers类型交换机
上面的三种都是通过 Routing Key来进行匹配的而headers是通过消息的header来进行匹配的。 headers头部的 x-match 参数是 必须的如果x-match设置的是all那么生产者在生产消息时必须满足设置的headers条件 我上面设置的是 x-matchall namejackage23那么我想发送消息到这个队列里面那么消息头必须要有 namejackage23。 如果我设置的是 x-matchany 那么我满足其中一个条件就好了比如上面是 name jackage 23那么我消息头带其中的一个就可以了也就是他们两个的任意一个。 如果不满足的话消息无法到达exchange绑定的queue中。