Fanout

RabbitMQ之发布订阅

試著忘記壹切 提交于 2021-01-03 07:48:03
将同一个队列的消息发送给多个消费者的模式就是“发布/订阅”, 这种模式的基础是将消息广播到所有的接收器上。 实际上,RabbitMQ中消息传递模型的核心思想是: 生产者不直接发送消息到队列。 实际的运行环境中,生产者是不知道消息会发送到哪个队列上, 她只会将消息发送到一个交换器, 交换器也像一个生产线,她一边接收生产者发来的消息,另外一边则根据交换规则,将消息放到队列中。 交换器必须知道她所接收的消息是什么?它应该被放到哪个队列中?它应该被添加到多个队列吗?还是应该丢弃? 这些规则都是按照交换器的规则来确定的。 交换器的规则有: direct (直连) topic (主题) headers (标题) fanout (分发)也有翻译为扇出的 我们将使用【fanout】类型创建一个名称为myexchange的交换器 channel.exchangeDeclare("myexchange", "fanout"); 分发交换器很简单,你通过名称也能想到,她是广播所有的消息 通过rabbitmqctl list_exchanges指令可以列出服务器上所有可用的交换器列表 这个列表里面所有以【amq.*】开头的交换器都是RabbitMQ默认创建的。在生产环境中,可以自己定义。 在之前的实例中,我们知道,发送消息到队列时根本没有使用交换器,但是消息也能发送到队列。

python3之rabbitMQ

依然范特西╮ 提交于 2020-12-18 06:42:02
1、RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 MQ全称为Message Queue, 消息队列 (MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如 远程过程调用 的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。 消息队列技术是分布式应用间交换信息的一种技术;消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走;通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。 MQ主要作用是接受和转发消息。 你可以想想在生活中的一种场景

RabbitMQ之交换机

≡放荡痞女 提交于 2020-12-16 21:11:07
1. 交换机类型    rabbitmq常见有四种交换机类型: direct, topic, fanout, headers.   一般headers都不用,工作中用得较多的是fanout,它会将消息推送到所有绑定在此交换机上的队列中,效率也是这几种交换机中最高的。   交换机是啥? 感觉跟网关差不多,就是路由、转发消息.   下面具体说说几种交换机的使用 2. 交换机的使用 2.1 direct 交换机    direct: 直连 相当于 1 对 1.   生产者----> direct exchange ---> queue ----> 消费者    // 生产端代码 public static void main(String[] args) throws Exception { // 1 创建ConnectionFactory ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setHost( "127.0.0.1" ); connectionFactory.setPort( 5672 ); connectionFactory.setVirtualHost( "/" ); // 2 创建Connection Connection connection =

RabbitMQ-2介绍

狂风中的少年 提交于 2020-12-16 04:28:34
简介 RabbitMQ:接受消息再传递消息,可以视为一个"邮局"。发送者和接受者通过队列来进行交互,队列的大小可以视为无限的,多个发送者可以发生给一个队列,多个接收者也可以从一个队列中接受消息。 code rabbitmq使用的协议是amqp,用于python的推荐客户端是pika pip install pika -i https://pypi.douban.com/simple/ 生产者:send.py import pika # 建立一个连接 connection = pika.BlockingConnection(pika.ConnectionParameters( 'localhost')) # 连接本地的RabbitMQ服务器 channel = connection.channel() # 获得channel 这里链接的是本机的,如果想要连接其他机器上的服务器,只要填入地址或主机名即可。 接下来我们开始发送消息了,注意要确保接受消息的队列是存在的,否则rabbitmq就丢弃掉该消息. channel.queue_declare(queue='hello') # 在RabbitMQ中创建hello这个队列 channel.basic_publish(exchange='', # 使用默认的exchange来发送消息到队列 routing_key='hello', #

RabbitMq的几种模式

馋奶兔 提交于 2020-12-11 19:55:22
1.RabbitMq的队列的模式 2.RabbitMq的工作队列的模式 3.RabbitMq的发布订阅模式- Fanout 模式 什么是发布订阅的fanout的模式? fanout模式又称广播模式即就是在交换机接收到消息后向队列中发送消息是没有任何的规则的,单纯的就是将消息交给后面的队列组进行处理即可 ; 扇型交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。 4.RabbitMq的发布订阅模式- Direct 模式 直连型交换机,根据消息携带的路由键将消息投递给对应队列。 大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。 然后当一个消息携带着路由值为X,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值X去寻找绑定值也是X的队列。 5.RabbitMq的发布订阅模式- Topic 模式 主题交换机,这个交换机其实跟直连交换机流程差不多,但是它的特点就是在它的路由键和绑定键之间是有规则的。 简单地介绍下规则: * (星号) 用来表示一个单词 (必须出现的) # (井号) 用来表示任意数量(零个或多个)单词 通配的绑定键是跟队列进行绑定的,举个小例子 队列Q1 绑定键为 *.TT.* 队列Q2绑定键为 TT.# 如果一条消息携带的路由键为 A.TT.B

Vivado工程经验与时序收敛技巧

对着背影说爱祢 提交于 2020-12-04 07:35:01
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/truecrab/article/details/80651655 FPGA毕竟不是ASIC,对时序收敛的要求更加严格,本文主要介绍本人在工程中学习到的各种时序约束技巧。 首先强烈推荐阅读官方文档UG903和UG949,这是最重要的参考资料,没有之一。它提倡要在设计的早期阶段就要排除问题,越到后期时序的改善就越困难。其中HLS层次对性能的影响是最大的。 本文将从代码风格,时序修正,工程设置等几个方面介绍本人的实践经验,希望让各位初学者快速提高,也希望FPGAer能给出宝贵建议。 1. 代码风格 推荐使用Xilinx language templates的代码块,这里的代码能够综合出正确且结构简洁的电路,包括移位寄存器,乘法,复数乘法,FIR滤波器等,凡是涉及到的模块尽量使用官方写法。 合理的设计代码框架。IO相关的代码、时钟管理单元尽量放在顶层,后者有助于以共享资源从而提高性能降低功耗。模块的输出最好是使用寄存器输出,有助于降低路径延时帮助时序收敛。 复位也是非常重要的问题。和ASIC不同,Xilinx FPGA的寄存器是高电平复位,支持异步复位和同步复位,但是DSP和BRAM内部的寄存器不支持异步复位。因此

RabbitMq学习5-路由(Routing)

我是研究僧i 提交于 2020-11-27 07:33:25
一、路由(Routing) 在前面的教程中,我们实现了一个简单的日志系统。可以把日志消息广播给多个接收者。 本篇教程中我们打算新增一个功能——使得它能够只订阅消息的一个字集。例如,我们只需要把严重的错误日志信息 写入日志文件(存储到磁盘),但同时仍然把所有的日志信息输出到控制台中 二、绑定(Bindings) 前面的例子,我们已经创建过绑定(bindings),代码如下: $exchange - > publish ( $message , '' ) ; 绑定(binding)是指交换器(exchange)和队列(queue)的关系。可以简单理解为:这个队列(queue)对这个交换器(exchange)的消息感兴趣。 绑定的时候可以带上一个额外的routingkey参数。为了避免与basicpublish的参数混淆,我们把它叫做binding key。以下是如何创建一个带binding key的绑定。 $exchange - > publish ( $message , $routeKey ) ; binding key的含义取决于交换器(exchange)的类型。 我们之前使用过的fanout类型会忽略这个值 。 三、Direct类型的交换器(exchange) 我们的日志系统广播所有的消息给所有的消费者(consumers)。我们打算扩展它,使其可以能够精确的过滤消息

Springboot 集成 RabbitMQ

筅森魡賤 提交于 2020-11-17 03:54:35
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将 RocketMQ 捐献给了 Apache,当然了今天的主角还是讲 RabbitMQ。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC 的调用等等。 以前一直使用的是 ActiveMQ,在实际的生产使用中也出现了一些小问题,在网络查阅了很多的资料后,决定尝试使用 RabbitMQ 来替换 ActiveMQ,RabbitMQ 的高可用性、高性能、灵活性等一些特点吸引了我们,查阅了一些资料整理出此文。 RabbitMQ 介绍 RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。 AMQP,即 Advanced Message Queuing Protocol

MySQL优化器功能开关optimizer_switch

牧云@^-^@ 提交于 2020-11-16 02:46:49
MySQL 8.0新增特性 use_invisible_indexes:是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on表示考虑使用。 MySQL 5.7新增 derived_merge:派生表合并,类似Oracle的视图合并,当派生SQL中存在以下操作是无法展开UNION 、GROUP 、DISTINCT、LIMIT及聚合操作 duplicateweedout:是否使用使用临时表对semi-join产生的结果集去重 condition_fanout_filter:cost模型在jion 代价计算时考虑condition,是否还要还要考虑condition上的filter,如果是on表示考虑 MySQL 5.6 新增 mrr和mrr_cost_based:针对多列索引,也叫组合索引来做基本扫描,然后对匹配的记录按照主键排序,这样按照有序的主键顺序从磁盘上扫描需要的全部记录。根本功能是把对磁盘的随机扫描转化为顺序扫描。 batched_key_access:对于多表join语句,当MySQL使用索引访问第二个join表的时候,使用一个join buffer来收集第一个操作对象生成的相关列值。BKA构建好key后,批量传给引擎层做索引查找。key是通过MRR接口提交给引擎的. 这样,MRR使得查询更有效率。

深入理解:一文讲透RabbitMQ

浪尽此生 提交于 2020-11-14 01:34:09
点击蓝色“ 黎杜编程 ”关注我哟 加个“ 星标 ”,每天上午 09:25,干货推送! 关于RabbitMQ 出身:诞生于金融行业的消息队列 语言:Erlang 协议:AMQP(Advanced Message Queuing Protocol 高级消息队列协议) 关键词:内存队列,高可用,一条消息 队列结构 Producer/Consumer:生产者消费者 Exchange:交换器,可以理解为队列的路由逻辑,交换器主要有三种,图中是Direct交换器 Queue:队列 Binding:绑定关系,实际是交换器上映射队列的规则 发送和消费一条消息 在上图的模式下,交换器的类型为Direct,伪代码表示消息的生产和消费 消息生产 #消息发送方法 #messageBody 消息体 #exchangeName 交换器名称 #routingKey 路由键 publishMsg(messageBody,exchangeName,routingKey){ ...... } #消息发送 publishMsg( "This is a warning log" , "exchange" , "log.warning" ); RoutingKey=log.warning,和队列A与交换器的绑定一致,所以消息被路由到了队列A上。 消息消费 对于消息消费而言,消费者直接指定要消费的队列即可