再战RabbitMQ-模式三-发布订阅模式

rabbitmq 发布订阅订阅模式

尝试使用fanout模式进行发送
具体操作步骤如下

发送端

准备10条消息

 ConnectionFactory connectionFactory = connectionFactory();
        Connection connection = connectionFactory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_01, BuiltinExchangeType.FANOUT);
        for (int i = 0; i < 10; i++) {
            byte[] body = ("张三,你好,"+i).getBytes();
            channel.basicPublish(EXCHANGE_01, "", MessageProperties.PERSISTENT_TEXT_PLAIN, body);
        }

接收端1

    ConnectionFactory connectionFactory = connectionFactory();
        Connection connection = connectionFactory.newConnection();
        Channel channel = connection.createChannel();

        //申明交换机、队列、绑定关系
        channel.exchangeDeclare(EXCHANGE_01, BuiltinExchangeType.FANOUT);
        channel.queueDeclare(QUEUE_01,true,false,false,null);
        channel.queueBind(QUEUE_01,EXCHANGE_01,"");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(QUEUE_01, true, deliverCallback, consumerTag -> { });

接收端2

 ConnectionFactory connectionFactory = connectionFactory();
        Connection connection = connectionFactory.newConnection();
        Channel channel = connection.createChannel();

        //申明交换机、队列、绑定关系
        channel.exchangeDeclare(EXCHANGE_01, BuiltinExchangeType.FANOUT);
        channel.queueDeclare(QUEUE_02,true,false,false,null);
        channel.queueBind(QUEUE_02, EXCHANGE_01, "");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(QUEUE_02, true, deliverCallback, consumerTag -> {
        });

队列模型图

以上代码生关系

运行结果-并非把所有消息发送到两个消息费

消费端1

消费端1## 消费端2
消费端2

结论

可以正确的把消息广播到两个消费者。

遗留小问题:之前尝试几次发送,消费者1和消费者2收到的消息个数不同。后续尝试几次,结论正常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章