exchange

RabbitMQ入门:主题路由器(Topic Exchange)

匿名 (未验证) 提交于 2019-12-03 00:37:01
上一篇博文中,我们使用direct exchange 代替了fanout exchange,这次我们来看下topic exchange。 一、Topic Exchange介绍 topic exchange和direct exchange类似,都是通过routing key和binding key进行匹配,不同的是topic exchange可以为routing key设置多重标准。 direct路由器类似于sql语句中的精确查询;topic 路由器有点类似于sql语句中的模糊查询。 还记得吗?我们在《 RabbitMQ入门:发布/订阅(Publish/Subscribe) 》中对exchange的分类进行过介绍: Direct:完全根据key进行投递的,例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。 Topic:对key进行模式匹配后进行投递,符号”#”匹配一个或多个词,符号” *”匹配正好一个词。例如”abc.#”匹配”abc.def.ghi”,”abc.* ”只匹配”abc.def”。 Fanout:不需要key,它采取广播模式,一个消息进来时,投递到与该交换机绑定的所有队列。 Headers:我们可以不考虑它。 下面是官网给出的工作模型(P代表生产者,X代表exhange,红色的Q代表队列

RabbitMQ之消息持久化

匿名 (未验证) 提交于 2019-12-03 00:36:02
原文地址 消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢――消息持久化。 为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exchange和Message都持久化。 queue的持久化 queue的持久化是通过durable=true来实现的。 一般程序中这么使用: Connection connection = connectionFactory . newConnection (); Channel channel = connection . createChannel (); channel . queueDeclare ( "queue.persistent.name" , true , false , false , null ); 关键的是第二个参数设置为true,即durable=true. Channel类中queueDeclare的完整定义如下: /** * Declare a queue * @see com.rabbitmq.client.AMQP.Queue.Declare * @see com.rabbitmq.client.AMQP.Queue.DeclareOk * @param queue the name of the queue * @param durable

Exchange 2016与O365混合部署(2):搭建域环境

匿名 (未验证) 提交于 2019-12-03 00:34:01
安装域环境: 远程登录虚机后,打开server manager,选择“ add roles and features ”,一直下一步: 到"server roles"这个环节,注意勾选 AD DS和 DNS 两个选项,一直下一步,直到完成。 安装完成后,server manager的右上角会弹出一个警告:升级此服务器为域控,点击弹出的链接,选择添加新林,将根域名输入,下一步,设置相应的密码,直到完成。 完成后sever manager的左侧导航栏会列出AD DS 和 DNS 两个server的图标,点DNS manage 进入查看主机记录是否添加进来; 在AD上创建组织单位,组,计算机和用户。 选择AD DS,右键打开【添加计算机和用户】,在此处创建用户。 组织单位可以根据地域来划分,比如可以把上海化为一个组织单位,在该组织单位下创建不同的部门,在不同的部门下创建不同的组和用户;再创建一个北京的组织单位也是如此; 组是用户和计算机帐户、联系人的集合,属于特定组的用户和计算机称为组成员。我们针对某个组进行授权时,该授权对组中的所有成员都有效。例如对某个组授予访问共享文件夹和打印机的权限,那么组中的成员都将拥用此权限。因此可以使用组简化管理,高效地管理域用户对域资源的访问。用户可以同时属于多个组,当属于多个组时,也就有了这多个组的权限。例如,当新的软件补丁包出现时

vue exchange port and cross-domain

匿名 (未验证) 提交于 2019-12-03 00:29:01
1 exchange port : index.js // Various Dev Server settings host: 'localhost', // can be overwritten by process.env.HOST port: 7777, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined autoOpenBrowser: false, errorOverlay: true, notifyOnErrors: true, poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 2 cross-domain : index.js proxyTable: { '/api': { target: 'http://localhost:8080',//设置你调用的接口域名和端口号 别忘了加http changeOrigin: true, pathRewrite: { '^/api': ''//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00

RabbitMQ使用介绍4—Routing

别来无恙 提交于 2019-12-03 00:26:41
Routing 此案例中,我们会尝试更多的特性,例如,仅仅将错误信息传递到Log文件中(节省空间),同时仍能将所有信息打印到控制台上 Bindings有一个额外的参数routing_key,为了防止和basic_publish参数混淆,我们将它叫做binding_key.这是我们怎么去创建一个binding_key: channel.queue_bind(exchange=exchange_name, queue=queue_name, routing_key='black') 这意味着binding key 取决于exchange类型,fanout exchanges 之前使用的exchanges忽略了它的价值 Direct exchange 之前教程的日志系统广播所有的信息给所有的消费者,我们想要扩展允许过滤信息根据严重性,例如,我们可能希望将日志消息写入磁盘的脚本仅接收严重的错误,并且warning或者info日志消息不会浪费空间. 我们使用的fanout exchange它并没有给我们带来太大的灵活性,它只能进行无意识的广播, 我们将使用direct exchange代替,direct exchange路由是很简单的,消息进入绑定的binding和路由的key相匹配的队列里,为了说明这一点,请考虑以下设置: 在此设置中,我们可以看到direct exchange X

Exchanger简单示例

匿名 (未验证) 提交于 2019-12-03 00:26:01
A synchronization point at which threads can pair and swap elements within pairs . Each thread presents some object on entry to the exchange method , matches with a partner thread , and receives its partner 's object on return. An Exchanger may be viewed as a bidirectional form of a SynchronousQueue. Exchangers may be useful in applications such as genetic algorithms and pipeline designs. Exchanger<V> V为可以交换的对象的类型; Exchanger 它提供一个同步点, 用于进行线程间 成对 配对及交换数据,两个线程通过exchange方法交换数据,如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。因此使用Exchanger的重点是成对的线程使用exchange(

SpringBoot整合RabbitMQ案例

匿名 (未验证) 提交于 2019-12-03 00:22:01
一、pom.xml和配置文件(使用之前安装RabbitMQ服务--省略) <!-- 整合搭建rabbitMq --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> server: port: 9010 spring: application: name: springCloud-rabbitMq eureka: instance: hostname: localhost client: register-with-eureka: true fetch-registry: false service-url: defaultZone: http://localhost:9001/eureka/ spring: rabbitmq: host: localhost port: 5672 username: guest password: guest 二、配置config package rabbitMq.config; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core

RabbitMQ Exchange Queue RoutingKey BindingKey解析

匿名 (未验证) 提交于 2019-12-03 00:19:01
许多新手在刚接触RabbitMQ的时候,会被各种名词弄晕,包括ConnectionFactory 、Connection 、Channel、Exchange、Queue、RoutingKey、BindingKey等等,现在我言简意赅的描绘一下这些名词到底是啥概念 首先我们肯定知道RabbitMQ就是消息队列的一种实现,那么围绕这个,我们就可以思考一个消息队列到底需要什么,当然是需要队列,那么这个队列就是Queue,那么其他的所有名词都是围绕这个Queue来拓展的。 首先,想要让队列不在本地运行,而在网络中运行,肯定会有连接这个概念,所以就会有Connection,我们发一条消息连接一次,这样很显然是浪费资源的,建立连接的过程也很耗时,所以我们就会做一个东西让他来管理连接,当我用的时候,直接从里边拿出来已经建立好的连接发信息,那么ConnectionFactory应运而生。 接下来,当程序开发时,可能不止用到一个队列,可能有订单的队列、消息的队列、任务的队列等等,那么就需要给不同的queue发信息,那么和每一个队列连接的这个概念,就叫Channel 再往下来,当我们开发的时候还有时候会用到这样一种功能,就是当我发送一条消息,需要让几个queue都收到,那么怎么解决这个问题呢,难道我要给每一个queue发送一次消息?那岂不是浪费带宽又浪费资源,我们能想到什么办法呢

RebbitMQ

匿名 (未验证) 提交于 2019-12-03 00:11:01
核心概念 Producer:消息生产者,即投递消息的程序。 Broker:消息队列服务器实体。单个机器可以部署多个Broker Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Binding:绑定,它的作用就是把 Exchange 和 Queue 按照路由规则绑定起来。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Consumer:消息消费者,即接受消息的程序。 Exchange 收到消息时,他是如何知道需要发送至哪些 Queue 呢?这里就需要了解 Binding 和 RoutingKey 的概念: Binding 表示 Exchange 与 Queue 之间的关系,我们也可以简单的认为队列对该交换机上的消息感兴趣,绑定可以附带一个额外的参数 RoutingKey。Exchange 就是根据这个 RoutingKey 和当前 Exchange 所有绑定的 Binding 做匹配,如果满足匹配,就往 Exchange 所绑定的 Queue 发送消息,这样就解决了我们向 RabbitMQ 发送一次消息,可以分发到不同的 Queue。RoutingKey 的意义依赖于交换机的类型。 Exchange 的三种主要类型: Fanout(广播) 、 Direct(直接) 和 Topic(通配符匹配) Fanout Exchange 会忽略