案例
由于Fanout类型的交换机原理类似于广播的模式,所以需要先启动消息的消费者以避免消息的丢失。
接受方:
消费者1:
public class Reseive {
public static void main(String[] args) {
ConnectionFactory factory=new ConnectionFactory();
factory.setHost("192.168.79.140");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("123456");
/**通道资源和连接资源不需要关闭
* 关闭小概率会抛出异常
* */
Connection connection=null;
Channel channel=null;
try {
connection=factory.newConnection();
channel=connection.createChannel();
/**由于Fanout类型的交换机的消息类似于广播模式,所以它不需要绑定RountingKey
* 而又可能会有多个消息消费者来接受队列中的数据,因此从队列时要创建一个随机的队列名称。
*
* 没有参数的queueDeclare函数会创建一个名字随机的队列
* 该队列的数据是非持久化的、自动删除的、排外的(即只允许有一个监听者)
*
* getQueue()函数用于获取该队列的名称
* */
String queueName= channel.queueDeclare().getQueue();
/**创建交换机
* */
channel.exchangeDeclare("fanoutExchange",
"fanout",true);
/**由于Fanout类型的交换机不需要绑定RoutingKey所以这里为空字符串
* */
channel.queueBind(queueName,
"fanoutExchange","");
/**获取消息
* */
channel.basicConsume