消息生产者
package com.gch.rabbit.routing; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class RoutingSend { //设置交换器名称 private static final String EXCHANGE_NAME = "direct_logs"; // 路由关键字 private static final String[] routingKeys = new String[]{"info" ,"warning", "error"}; public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); //声明交换器 channel.exchangeDeclare(EXCHANGE_NAME, "direct"); //发送消息 for(String severity : routingKeys){ String message = "发送消息路由:" + severity; channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes()); System.out.println("发送:" + severity + ",\t" + message + "'"); } channel.close(); connection.close(); } }
1号消息消费者
package com.gch.rabbit.routing; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; import java.io.IOException; public class ReceiveLogs1 { // 交换器名称 private static final String EXCHANGE_NAME = "direct_logs"; // 路由关键字 private static final String[] routingKeys = new String[]{"info" ,"warning", "error"}; public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); //声明交换器 channel.exchangeDeclare(EXCHANGE_NAME, "direct"); //获取匿名队列名称 String queueName = channel.queueDeclare().getQueue(); //根据路由关键字进行多重绑定 for (String severity : routingKeys) { channel.queueBind(queueName, EXCHANGE_NAME, severity); System.out.println("1号直连多重绑定交换器:"+EXCHANGE_NAME+", 队列:"+queueName+", 路由:" + severity); } System.out.println("1号直连多重绑定交换器正在等待消息..."); 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("1号直多重绑定连交换器接收到消息:" + envelope.getRoutingKey() + "':'" + message + "'"); } }; channel.basicConsume(queueName, true, consumer); } }2号消息消费者
package com.gch.rabbit.routing; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; import java.io.IOException; public class ReceiveLogs2 { // 交换器名称 private static final String EXCHANGE_NAME = "direct_logs"; // 路由关键字 private static final String[] routingKeys = new String[]{"error"}; public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); //声明交换器 channel.exchangeDeclare(EXCHANGE_NAME, "direct"); //获取匿名队列名称 String queueName = channel.queueDeclare().getQueue(); //根据路由关键字进行多重绑定 for (String severity : routingKeys) { channel.queueBind(queueName, EXCHANGE_NAME, severity); System.out.println("2号直连多重绑定交换器:"+EXCHANGE_NAME+", 队列:"+queueName+", 路由:" + severity); } System.out.println("2号直连多重绑定交换器正在等待消息..."); 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("2号直连多重绑定交换器接收到消息:" + envelope.getRoutingKey() + "':'" + message + "'"); } }; channel.basicConsume(queueName, true, consumer); } }