rabbitMQ的第三种模型(fanout)

Posted yz-bky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitMQ的第三种模型(fanout)相关的知识,希望对你有一定的参考价值。

fanout 扇出 也曾为广播

 技术图片

 

在广播模式下,消息发送流程是这样的:

  • 可以有多个消费者
  • 每个消费者有自己的queue(队列)
  • 每个队列都要绑定到Exchange(交换机)
  • 生产者发送的消息,只能够发送到交换机,交换机决堤要发送给那个队列,生产者无法决定
  • 交换机把消息发送给绑定过的所有队列
  • 队列的消费者都能拿到消息,实现一条消息被多个消费者消费  

生产者

public class Provider {
    public static void main(String[] args) throws IOException {
        Connection connection = rabbitMQUtils.getConnection();
        Channel channel = connection.createChannel();
        //将通道声明指定交换机 //参数1交换机名字 参数2交换机类型 fanout 广播类型
        channel.exchangeDeclare("logs","fanout");
        //发送消息
        channel.basicPublish("logs","",null,"fanout type message".getBytes());
        rabbitMQUtils.connectionAndchannelClose(connection,channel);

    }
}

消费者(创建多个相同的消费者)

public class Customer1 {
    public static void main(String[] args) throws IOException {
        Connection connection = rabbitMQUtils.getConnection();
        Channel channel = connection.createChannel();
        //通道绑定交换机
        channel.exchangeDeclare("logs","fanout");
        //临时列队
        String queue = channel.queueDeclare().getQueue();
        //绑定交换机和队列
        channel.queueBind(queue,"logs","");

        channel.basicConsume(queue,true,new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                super.handleDelivery(consumerTag, envelope, properties, body);
                System.out.println("消费者-1"+new String(body));
            }
        });
    }
}

 

以上是关于rabbitMQ的第三种模型(fanout)的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

RabbitMQ 学习---- Fanout 广播模型

RabbitMQ 学习---- Fanout 广播模型

RabbitMQ 学习---- Fanout 广播模型

RabbitMQ——使用Exchange中的fanout交换机实现消息发送和接收