消息生产者
package com.gch.rabbit.publish; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class EmitLog { private static final String EXCHANGE_NAME = "logs"; 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, "fanout");//信道设置一个交换器,并设置交换规则 //因为设置的交换器交换规则为分发,所以所有的队列都能接收到消息,所以此处不用声明队列 //分发消息 for(int i = 0 ; i < 5; i++){ String message = "Hello World! " + i; channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes());//把消息发送给交换器 System.out.println("发送消息:" + message); } channel.close(); connection.close(); } }
1号消息接收者
package com.gch.rabbit.publish; 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 = "logs"; 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, "fanout"); String queueName = channel.queueDeclare().getQueue();//声明一个临时队列,用于接收消息 channel.queueBind(queueName, EXCHANGE_NAME, "");//将临时队列和交换器绑定 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号临时队列接收到消息:" + message); } }; channel.basicConsume(queueName, true, consumer); } }
2号消息接收者
package com.gch.rabbit.publish; 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 = "logs"; 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, "fanout"); String queueName = channel.queueDeclare().getQueue();//声明一个临时队列,用于接收消息 channel.queueBind(queueName, EXCHANGE_NAME, "");//将临时队列和交换器绑定 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号临时队列接收到消息:" + message); } }; channel.basicConsume(queueName, true, consumer); } }