rabbitmq
是一个在AMQP协议上实现的企业级消息系统。何谓消息系统,就是消息队列系统,消息队列是“”消费-生产者模型“”的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。
Vritual host:虚拟地址,最上层的消息路由,一个virtual Host 里面可以有若干个Exchange和Queue, 同一个virtual Host里面不能有相同名称的EXchange或Queue
Exchange: 交换机,接收消息,根据路由键装发消息到绑定的队列
Binding: Exchange和Queue之间的虚拟连接,binding中可以包含routing key
Routing key: 一个路由规则,虚拟机可用它来确定如何路由一个特定消息
Queue: 也称为Message Queue 消息队列,保存消息并将它们转发给消费者
交换机的类型有
1、direct模式(直连)
(direct exchange)是根据消息携带的路由键(routing key)将消息投递给对应队列的。直连交换机用来处理消息的单播路由(unicast routing)(尽管它也可以处理多播路由)。
如果多个队列被绑定到具有相同路由K的直接交换机,则交换机将消息推送到这些队列上------多播路由
2、fanout模式(扇形)
扇型交换机(funout exchange)将消息路由给绑定到它身上的所有队列,而不理会绑定的路由键。如果N个队列绑定到某个扇型交换机上,当有消息发送给此扇型交换机时,交换机会将消息的拷贝分别发送给这所有的N个队列。扇型用来交换机处理消息的广播路由
3、主题模式(发布/订阅)
主题交换机(topic exchanges)通过对消息的路由键和队列到交换机的绑定模式之间的匹配,将消息路由给一个或多个队列。主题交换机经常用来实现各种分发/订阅模式及其变种。主题交换机通常用来实现消息的多播路由
4、头部模式
有时消息的路由操作会涉及到多个属性,此时使用消息头就比用路由键更容易表达,头交换机(headers exchange)就是为此而生的。头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。
注意:设置的交换机类型后,不能再修改
生产者端可开启事务:
AMQP事务保证RabbitMQ不仅收到了消息,并成功将消息路由到了所有匹配的订阅队列,AMQP事务将使得生产者和RabbitMQ产生同步。虽然事务使得生产者可以确定消息已经到达RabbitMQ中的对应队列,但是却会降低2~10倍的消息吞吐量。
消费者端:
rabbitmq采用轮询的方式发送数据给消费者,回复ack会提醒rabbitmq消息已在消费者中收到
生产者端基本流程:
1.创建连接
2.在连接内创建一个通道
3.创建交换机
4.设置交换机类型
5.设置交换机持久
6.声明交换机并输出状态
7.创建队列
8.声明消息队列并输出状态
9、发送消息到rabbitmq服务器
12.关闭连接
消费者端基本流程:
1.创建连接
2.在连接内创建一个通道
3.创建交换机
4.设置交换机类型
5.设置交换机持久
6.声明交换机并输出状态
7.创建队列
8.声明消息队列并输出状态
9.绑定交换机与队列,并指定路由键
10.设置消息队列消费者回调方法,并进行阻塞
11.接收消息并进行处理的回调方法
12.关闭连接
交换机不同方式的测试结果
标签:队列,绑定,高级,rabbitmq,交换机,消息,消息中间件,路由 From: https://www.cnblogs.com/TreeSky/p/17205965.html