Rabbitmq消息队列(五) 路由Routing

1、简介

  在以前一章中,我们可以把一个消息广播给多个接收者。在这一章中,我们会增加一个功能:接收者能够只接收订阅消息中的一个子集。

2、绑定

  在我们将交换机和队列进行绑定的时候,我们可以添加一个额外的参数:绑定建(routing_key)。绑定建的意义取决于交换机的类型,其中扇形交换机会忽略这个值。

  带绑定建的绑定的格式:

 channel.queueBind(queueName, EXCHANGE_NAME, "black");

3、直连交换机(Direct exchange)

  我们使用的扇型交换机(fanout exchange)没有足够的灵活性,因为它能做的仅仅是广播, 而直连交换机会对绑定键(binding key)和路由键(routing key)进行精确匹配,从而确定消息该分发到哪个队列。

  Rabbitmq消息队列(五) 路由Routing

  在直连交换机中,多个绑定格式也是合法的:

  Rabbitmq消息队列(五) 路由Routing

3、通过直连交换机发送消息

 Connection connection = factory.newConnection();
Channel channel = connection.createChannel(); channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT);
channel.basicPublish(exchangeName, bindingKey, null, message.getBytes());
System.out.println("发送消息:" + message); channel.close();
connection.close();

4、订阅接收消息

 Connection connection = factory.newConnection();
Channel channel = connection.createChannel(); channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT);
String queueName = channel.queueDeclare().getQueue(); // 创建一个临时空队列
channel.queueBind(queueName, exchangeName, bindingKey); // 将交换机和队列进行绑定,告诉交换机将消息发送到我们的队列中 Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8"); System.out.println("接收到消息:" + message);
}
};
channel.basicConsume(queueName, true, consumer);

5、运行测试

  这样,接收方就可以接收到指定绑定key的消息了。

上一篇:Egret入门学习日记 --- 第五篇(书中 3.5节 内容)


下一篇:C# 枚举转字符串