模型:
1、一个生产者,多个消费者
2、每一个消费者都有自己的队列
3、生产者没有直接把消息发送到队列,而是发送到交换机上
4、每个队列都需要绑定到交换机上
5、生产者发送的消息,经过交换机,到达队列,就能实现一个消息被多个消费者消费
生产者
public class Provider {
private static final String EXCHANGE_NAME="my_exchange";
public static void main(String[] args) throws Exception {
Connection conn = RabbitMqUtil.getConnection();
Channel channel = conn.createChannel();
//声明交换机,指明分发类型
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
//发送消息到交换机
channel.basicPublish(EXCHANGE_NAME, "", null, "exchange data。。。。".getBytes());
channel.close();
conn.close();
}
}
生产者声明交换机,并发送消息到交换机中
消费者
public class Reciver1 {
private static final String EXCHANGE_NAME = "my_exchange";
private static final String QUNUE_NAME = "exchange_qunue1";
public static void main(String[] args) throws Exception {
Connection conn = RabbitMqUtil.getConnection();
Channel channel = conn.createChannel();
//声明队列
channel.queueDeclare(QUNUE_NAME,false,false,false,null);
//绑定队列到交换机
channel.queueBind(QUNUE_NAME, EXCHANGE_NAME, "");
//设置每次只发送一条消息
channel.basicQos(1);
Consumer consumer = new DefaultConsumer(channel) {
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
String msg = new String(body);
System.out.println(msg);
}
};
channel.basicConsume(QUNUE_NAME, true, consumer);
}
}
消费者有自己的队列,队列与交换机绑定,这样交换机会将消息推送到每一个与之绑定的队列,消费者监听自己的队列,所以每个消费者都能够消费同一条消息。
通过web界面可以看到交换机绑定队列的信息
。