RabbitMq六种使用模式(3)_订阅发布模式

来源:互联网 发布:nuity3d 用lua封装java 编辑:程序博客网 时间:2024/05/21 04:21

之前的例子都是讲消息直接发送给指定的队列;现在需要发送给多个队列,订阅/发布模式

生产者不再将消息直接发往队列,而是发往exchange,然后exchange再发送给在该exchange订阅的队列;

exchange需要知道如何对接收到的消息进行转发


exchange有四种类型:direct, topic, headers and fanout

一:fanout类型

 将消息发给所有在exchange注册的队列

channel.exchangeDeclare("logs", "fanout");//1:声明一个fanout的exchange channel.queueBind(queueName, "logs", "");//将队列在exchange注册 channel.basicPublish("logs", "", null, message.getBytes());//发送消息

二:direct类型

fanout类型的exchange可以将消息发送给在exchange上注册的所有的队列;

队列注册到direct类型的exchange时增加了route_key,每一个消息都有一个key,消息的key与队列的route_key一致时才会发往该队列;

channel.exchangeDeclare(EXCHANGE_NAME, "direct");channel.basicPublish(EXCHANGE_NAME, "key", null, message.getBytes());channel.queueBind(queueName, EXCHANGE_NAME, "key");

三:topic类型

direct类型中有一个缺点是:必须要消息的key和订阅的route_key完全一致才会发送到相应队列;

topic类型增加了相当于模糊匹配的功能;

*代表一个字符

#代表0个或多个字符

channel.exchangeDeclare(EXCHANGE_NAME, "topic");channel.basicPublish(EXCHANGE_NAME, "key.t", null, message.getBytes());channel.queueBind(queueName, EXCHANGE_NAME, "key.*");



0 0