再戰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收到的消息個數不同。後續嘗試幾次,結論正常

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