exchange

RabbitMQ入门实例

对着背影说爱祢 提交于 2019-11-30 22:44:35
一、基本概念理解 producer:消息的生产者 consumer:消息的消费者 virtual host:虚拟主机(对RabbitMQ进行功能性设置:队列访问、请求处理) broker:消息转发者(消息中转站),生产者向他发送消息,消费者从他这里获取消息 exchange:交换机,生产者每生产一条消息都会为他们生一个routing key(路由键,就是一个字符串)。生产者使用哪个交换机将消息发送到broker的指定queue中便由这个routing key决定。 queue:消息队列,用于存放消息,他接收exchange路由过来的消息,我们可以对队列内容进行持久化操作,那么queue到底接收那个exchange路由的消息呢?这个时候就要用到binding key(绑定键)了,绑定键会将队列和exchange进行绑定,至于绑定方式,RabbitMQ提供了多种方式。 二、实例搭建 1、导包 < dependency > < groupId > com.rabbitmq </ groupId > < artifactId > amqp-client </ artifactId > < version > 5.2.0 </ version > </ dependency > 2、创建producer的步骤 (1):创建ConnectionFactory,并且设置一些参数

RabbitMQ简单入门实例

点点圈 提交于 2019-11-30 22:44:16
1.Windows下安装RabbitMQ (1): 下载erlang ,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双击.exe文件进行安装就好,安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录,同时将%ERLANG_HOME%\bin加入到Path中,最后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语言环境安装成功; (2): 下载RabbitMQ ,下载地址:http://www.rabbitmq.com/,同样双击.exe进行安装就好; (3): 安装RabbitMQ-Plugins ,这个相当于是一个管理界面,方便我们在浏览器界面查看RabbitMQ各个消息队列以及exchange的工作情况,安装方法是:打开命令行cd进入rabbitmq的sbin目录(我的目录是:E:\software\rabbitmq\rabbitmq_server-3.6.5\sbin),输入:rabbitmq-plugins enable rabbitmq_management命令,稍等会会发现出现plugins安装成功的提示,默认是安装6个插件,如果你在安装插件的过程中出现了下面的错误: 解决方法:使用搜索文件工具

消息中间件---RabbitMQ入门2---消息传递模式

我是研究僧i 提交于 2019-11-30 22:42:20
第二篇我们简单介绍下RabbitMQ的一些消息传递模式: 1、直接模式(Direct) (1)直接模式简介 我们需要将消息发给唯一一个节点时使用这种模式,这是最简单的一种形式。 任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。 1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。 2.这种模式下不需要将Exchange进行任何绑定(binding)操作。 3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。 4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。 (2)创建队列 做下面的例子前,我们先建立一个叫itcast的队列。 Durability: 是否做持久化 Durable(持久) transient(临时) Auto delete : 是否自动删除 (3)代码实现---消息生产者 一、创建工程rabbitmq_demo,引入amqp起步依赖 ,pom.xml如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐parent</artifactId>

消息中间件-RabbitMQ学习

折月煮酒 提交于 2019-11-30 22:41:59
RabbitMQ安装 docker run -di --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management 登录mq页面,测试安装是否成功: ip:15672 登录账号: guest 密码: guest -学习应该从了解他的工作方式开始 前提: 就是要知道的 交换器 exchange, 队列queue 交换器:用来接收消息, 并分发给哪个队列, 一个或多个 队列: 用来存 消息的, 经过交换器的消息, 就会存到各个队列里, 一个或多个 -两个概念: 生产者: 通过rebbitmq生产消息 一个或多个 消费者: 使用rebbitmq里面的消息 一个或多个 -RabbitMQ模式: 3种, 交换器的不同分发规则 前提:需要在 (rabbitmq的可视化界面 ip:15672 端口 ) 添加一个队列 打开页面后,找到 Queues -> add a new queue中添加, 写队列名字 点击 Add Queue 即可添加 1 直接模式: Direct Exchange 可以理解为, 生产者直接将消息发送给了队列 指的是 交换器里有个 Direct Exchange[名字为 空字符串 ""的交换器],

消息中间件 - RabbitMQ - Python pika 库

随声附和 提交于 2019-11-30 22:27:08
目录 零、RabbitMQ 总结 0-1 channel 0-2 Exchange、Queue、Route 三者的关系和交互 一、轮询消费模式 1-1 生产者 1-2 消费者 二、队列持久化 三、广播模式 - ECHANGE 3-1 fanout - 转发速度最快 3-1-1 消费者(订阅者) 3-1-2 生产者(发布者) 3-2 direct - 路由键的完全匹配分发 3-2-1 生产者 3-2-2 消费者 3-3 topic - 路由关键词分发 3-3-1 生产者 3-3-2 消费者 四、 channel.basic_qos - 保证资源,提高效率 五、错误总结 零、RabbitMQ 总结 参考学习 - python RabbitMQ队列使用 参考学习 - RabbitMQ的应用场景以及基本原理介绍 python pika 库 - 官方文档 0-1 channel channel = connect.channel() - 提供与 RabbitMQ 交互的通道,通过通道对 exchange、queue 进行设置。 0-2 Exchange、Queue、Route 三者的关系和交互 执行流程 : 生产者生产msg,交付 exchange,exchange 通过 routingkey 匹配对应的 queue(绑定关系),queue 积累 msg,消费者监听对应的 queue

SpringBoot-RabbitMQ05-交换器【fanout】介绍

佐手、 提交于 2019-11-30 22:26:37
交换器介绍   RabbitMQ中有三种主要的交互器分别如下 交换器 说明 direct 发布与订阅 完全匹配 fanout 广播 topic 主体,规则匹配 Fanout   FanoutExchange 的数据交换策略是把所有到达 FanoutExchang 的消息转发给所有与它绑定的Queue ,在这种策略中, routingkey 将不起任何作用. 1.创建消费者 项目结构 配置文件 spring.application.name=springcloud-mq spring.rabbitmq.host=192.168.88.150 spring.rabbitmq.port=5672 spring.rabbitmq.username=dpb spring.rabbitmq.password=123 mq.config.exchange=order.fanout #短信服务队列名称 mq.config.queue.sms=order.sms #push 服务队列名称 mq.config.queue.push=order.push 两个消费者 @Component @RabbitListener ( bindings = @QueueBinding ( value = @Queue ( value = "${mq.config.queue.sms}" , autoDelete =

AMQP-RabbitMQ/3/发布订阅模式

不羁岁月 提交于 2019-11-30 22:26:18
3. 发布订阅模式 Publish/Subscribe - 全集监听 fanout 一次向多个消费者发送消息 图示 # 个人理解 生产者定义Exchange,同时将Exchange的类型定义为 fanout ,并向该Exchange发送消息。 消费者定义队列Queue,并将队列与该交换机进行绑定。之后交换机付负责将消息 全量推送 给每一个与之绑定的Queue RabbitMQ中消息传递模型的核心思想是生产者永远不会将任何消息直接发送到队列。实际上,生产者通常甚至不知道消息是否会被传递到任何队列。 相反,生产者只能向Exchange发送消息。Exchange所做的工作非常简单。一方面,它接收来自生产者的消息,另一方面将它们推送到队列。Exchange必须确切知道如何处理它收到的消息。它应该附加到特定队列吗?它应该附加到多个队列吗?或者它应该被丢弃。其规则由交换类型定义 。 有几种交换类型可供选择: direct , topic , headers and fanout fanout: 将它接收到的消息广播到所有绑定到它的消息队列上。(忽略路由键routingKey) 生产者 - 发布者 package com . futao . springmvcdemo . mq . rabbit . ps ; import com . futao . springmvcdemo . mq .

rabbitmq--发布-订阅模型

青春壹個敷衍的年華 提交于 2019-11-30 22:26:02
上两篇中我们介绍了rabbitmq中的收发模型和工作队列模型,它们都一个共同的特点——exchange是透明的,似乎不存在,收、发双方都是通过queue名称产生关联。 本篇中我们来着重介绍下rabbitmq中的exchange ,rabbitmq中涉及exchange(非透明)的收发模型我们称之为发布-订阅模型。在发布-订阅模型中,消息生产者和消费者不再是直接面对queue(队列名称),而是直面exchange,都需要经过exchange来进行消息的发送和接收。 发布-订阅模型又可以分为以下几种: fanout: 广播交换机,广播模型,不关心queue名称,不关心路由key direct: 直接交换机,直接路由模型,根据路由key字符串精确匹配, 不关心queue名称,关心路由key topic:主题交换机,主题路由模型,根据路由key字符串模糊(通配符)匹配, 不关心queue名称,关心路由key headers:头交换机,头路由模型(使用较少),不关心queue名称,不关心路由key,关心消息头中key-value对。 本篇,我们来介绍下第一种发布订阅模型——fanout广播模型。 广播模型的特点是:所有发往同一个fanout交换机的消息都会被所有监听这个交换机的消费者接收到,而不关心具体的路由key。广播交换机就如同一个广播地址,只要有消费者监听这个广播地址

RabbitMQ六种队列模式-发布订阅模式

断了今生、忘了曾经 提交于 2019-11-30 22:23:27
前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 [本文] RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题模式 上文的工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者。 显然这种只处理同种类型的消息是有弊端的。 举个用户注册的列子 门户网站,用户在注册完后一般都会发送消息通知用户注册成功(失败)。 如果在一个系统中,用户注册信息有邮箱、手机号,那么在注册完后会向邮箱和手机号都发送注册完成信息(假设都发送)。 利用 MQ 实现业务异步处理,如果是用工作队列的话,就会声明一个注册信息队列。注册完成之后生产者会向队列提交一条注册数据,消费者取出数据同时向邮箱以及手机号发送两条消息。但是实际上邮箱和手机号信息发送实际上是不同的业务逻辑,不应该放在一块处理。 这个时候就可以利用发布/订阅模式将消息发送到转换机(EXCHANGE),声明两个不同的队列(邮箱、手机),并绑定到交换机。这样生产者只需要发布一次消息,两个队列都会接收到消息发给对应的消费者,大致如下图所示。 在应用中,只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。 文章目录 文章目录 前言

系统拆分解耦利器之消息队列---RabbitMQ-路由

和自甴很熟 提交于 2019-11-30 22:15:25
[一曲广陵不如晨钟暮鼓] 本文,我们来介绍RabbitMQ中的路由功能。在正式开始之前,我们假设RabbitMQ服务已经启动,运行端口为5672,如果各位看官有更改过默认配置,那么就需要修改为对应端口,保持一致即可。 准备工作: 操作系统:window 7 x64 其他软件:eclipse mars,jdk7,maven 3 -------------------------------------------------------------------------------------------------------------------------------------------------------- 路由(Routing) 在前文的教程中,我们构建了一个非常简单的日志系统。将日志消息发送到所有的客户端当中。 现在,我们需要对上面的日志系统加入一些新的特性,使得某个 客户端 能够接收到部分消息。举个例子:上文的第一个客户端能只将错误的消息写入到磁盘,同时第二个客户端能将所有的日志消息打印在控制台上。 绑定(Bindings) 在上文的例子当中,我们使用下面的语句完成绑定: channel.queueBind(queueName, EXCHANGE_NAME, ""); 由此,在exchange与queue之间建立了绑定关系。可以简单的理解为