深圳狮科网站建设,网站快照,集团网站手机版,如何查公司注册信息及法人一、简介
Message Queue的需求由来已久#xff0c;80年代最早在金融交易中#xff0c;高盛等公司采用Teknekron公司的产品#xff0c;当时的Message queuing软件叫做#xff1a;the information bus#xff08;TIB#xff09;。 TIB被电信和通讯公司采用#xff0c;路透…一、简介
Message Queue的需求由来已久80年代最早在金融交易中高盛等公司采用Teknekron公司的产品当时的Message queuing软件叫做the information busTIB。 TIB被电信和通讯公司采用路透社收购了Teknekron公司。之后IBM开发了MQSeries微软开发了Microsoft Message QueueMSMQ。这些商业MQ供应商的问题是厂商锁定价格高昂。2001年Java Message queuing试图解决锁定和交互性的问题但对应用来说反而更加麻烦了。
于是2004年摩根大通和iMatrix开始着手Advanced Message Queuing Protocol AMQP开放标准的开发。2006年AMQP规范发布。2007年Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布。
二、AMQP 的基本概念
AMQPRabbitMQ必须由三部分交换器(exchange)、队列(queue)和绑定(binding)
消息Message由有效载荷playload和标签label组成。其中有效载荷既传输的数据。生产者producer创建消息发布到代理服务器Message Broker。代理服务器Message Broker接收和分发消息的应用RabbitMQ Server就是消息代理服务器其中包含概念很多以RabbitMQ 为例信道channel、队列queue、交换器exchange、路由键routing key、绑定binding key、虚拟主机vhost等。信道channel: 应用程序生产与/或消费和代理服务器之间TCP连接内的虚拟连接解决TCP连接数量限制及降低TCP连接代价。每个信道有一个ID其概念与“频分多路复用”类似。参考上图AMQP基本概念队列queue消息最终到达队列中等待消费者消费。使用“basic.consume”订阅可获得队列全部消息“basic.get”订阅只能获得队列的一条消息如果队列中存在消息。如果无人订阅消息将在队列中存储等待订阅如果多个消费者同时订阅该队列消息将以自动轮询round-robin方式发送给消费者Fanout Exchange每个消费者只能获得队列中消息的子集交换器exchange消息到达代理服务器的第一站根据分发规则匹配查询表中的routing key路由键Fanout Exchange除外分发消息到队列queue中去。常用的类型有direct (point-to-point), topic (publish-subscribe) and fanout (multicast)路由键routing key消息发送给交换器时消息将拥有一个路由键默认为空交换器根据这个路由键将消息发送到匹配的队列中。绑定键binding key队列需要通过绑定键默认为空绑定到交换器上交换器将消息的路由键与所绑定队列的绑定键进行匹配正确匹配的消息将发送到队列中。路由键是偏向生产的概念而绑定键是偏向消费的概念。虚拟主机vhostAMQP概念的基础其本质上就是一个mini版的代理服务器拥有自己的队列、交换器和绑定更重要的是拥有自己的权限机制RabbitMQ默认的vhost“/”类似于网络中的namespace每个用户只能访问自己的vhost通常会被指派至少一个vhost进而用户只能访问自己的队列、交换器和绑定所以vhost之间是绝对隔离的安全性与可移植性。消费者consumer连接到代理服务器并订阅到队列queue上代理服务器将发送消息给一个订阅的/监听的消费者消费者其只能接收消息的一部分有效载荷playload。
三、交换器、队列、绑定是怎么一回事
生产者发送消息到broker serverRabbitMQ。在Broker内部用户创建ExchangeQueue通过Binding规则将两者联系在一起。Exchange分发消息根据类型binding的不同分发策略有区别。消息最后来到Queue中等待消费者取走。
3.1 交换器类型
在RabbitMQ中生产者发送消息不会直接将消息投递到队列中而是先将消息投递到交换机中在由交换机转发到具体的队列队列再将消息以推送或者拉取方式给消费者进行消费
direct交换器 如果路由键routing key匹配成功消息就被投递到对应的各个队列绑定键binding key不支持“*”和“#”。消费者在接受消息的信道上可以给生产者反馈。 Message中的“routing key”如果和Binding中的“binding key”一致 Direct exchange则将message发到对应的queue中。fanout 不存在routing key路由键消息以自动轮询round-robin的形式发送到对应的队列幼儿园给孩子分苹果如果苹果足够多将平均分配给每个人队列不存在绑定键binding key消费者在接受消息的当前信道上可以给生产者反馈。
每个发到Fanout类型Exchange的message都会分到所有绑定的queue上去。 topic 存在routing key路由键消息以广播的形式发送到绑定键bing key匹配的各个队列绑定键binding key支持“”和“#” “#”通配任何零个或多个word “”通配任何单个word 这里也推荐给想要了解RabbitMQ的同学一个网站http://tryrabbitmq.com 它提供在线RabbitMQ 模拟器可以帮助理解Exchangequeuebinding概念。 根据routing key及通配规则Topic exchange将分发到目标queue中。 headers 已废弃 略