这篇博客主要是基于RabbitMQ官网介绍的入门六节中的后面两三节,结合自身的一些理解而成的,主要是用来总结和加深自己对RabbitMQ的使用与理解。
路由和主题的讲解
RabbitMQ不像ActiveMQ在创建容器(我自己这么叫,也就是存放信息的地方)可以指定是Queue或者Topic。而是通过在创建Exchange的时候 指定类型以及绑定Queue与Exchange的时候设置BindingKey来实现。
比如想实现主题模式的信息发送,那么就 将Exchange设置成fanout,然后每次创建新的消费者的时候都定义一个临时的Queue (如上一节说到的临时队列),之后将队列与FanoutExchange绑定,这样所有发送到FanoutExchange的消息 就会发送到同他绑定的所有队列中,从而实现了主题模式。
队列模式 其实就是将消息发送到Exchange(direct topic headers)时候,Exchange根据一下情况进行消息的存放(如果多个符合条件的Queue,那么会发送多个Queue):
- 与Exchange绑定的Queue设置的BindingKey 以及发送消息时设置的RoutingKey (Exchange为direct topic类型)Exchange 为direct时候 是BindingKey与RoutingKey完全一致 会发送到那条Queue, Exchange为topic的时候 BindingKey 应该是形如 a.# a.* a 之类的 那么当发送消息的RoutingKey匹配BindingKey时,会发送到此Queue.
- 发送消息的headers 设置(Exchange为headers类型时)与headersExchange和Queue绑定时候的参数 相匹配,如果消息的headers 包含 headersExchange和Queue绑定时候设置的参数(如果绑定设置的参数多个 那么要同时满足这多个才会发送到这个Queue)则发送到这个queue。比如发布消息之前 将basicProperties.headers