帶你玩轉RabbitMQ的五種佇列

專注的阿熊發表於2022-03-25

package com.yixin.routing;

import com.rabbitmq.client.*;

import com.yixin.util.ConnectionUtil;

import java.io.IOException;

public class Consumer2 {

    //需要繫結的交換機

    private final static String EXCHANGE_NAME = "direct-exchange";

    //佇列的名稱

    private final static String QUEUE_NAME = "direct-queue-2";

    public static void main(String[] args) {

        Connection connection = null;

        Channel channel = null;

        try {

            // 1: 從連線工廠中獲取連線

            connection =  connection = ConnectionUtil.getConnection("消費者2","伺服器地址",5672,"/","yixin","123456");

            // 2: 從連線中獲取通道channel

            channel = connection.createChannel();

            // 3: 宣告佇列,如果queue已經被建立過一次了,則可以不需要定義

            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            //繫結佇列到交換機

            //4:繫結佇列到交換機,指定路由key為update、delete、add(可以多個也可以單個)

            channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"select");

            //5:同一時刻伺服器只會傳送一條訊息給消費者

            channel.basicQos(1);

            // 6: 定義接受訊息的回撥

            Channel finalChannel = channel;

            //引數2:手動返回完成狀態

            finalChannel.basicConsume(QUEUE_NAME, false, new DeliverCallback() {

                public void handle(String s, Delivery delivery) throws IOException {

                    System.out.println(QUEUE_NAME + ":外匯跟單gendan5.com收到訊息是:" + new String(delivery.getBody(), "UTF-8"));

                    //返回確定狀態,由於我們是設定手動返回狀態的,如果沒有呼叫該方法,那麼訊息仍然在我們佇列中,不會被刪除

                    finalChannel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);

                }

            }, new CancelCallback() {

                public void handle(String consumerTag) throws IOException {

                }

            });

             System.out.println(QUEUE_NAME + ":開始接受訊息");

            //使我們的程式一直處於執行狀態,也就是一直處於監聽的狀態,這樣就不需要使用while(true)了。

            System.in.read();

        } catch (Exception ex) {

            ex.printStackTrace();

            System.out.println("傳送訊息出現異常...");

        } finally {

            // 7: 釋放連線關閉通道

            if (channel != null && channel.isOpen()) {

                try {

                    channel.close();

                } catch (Exception ex) {

                    ex.printStackTrace();

                }

            }

            if (connection != null && connection.isOpen()) {

                try {

                    connection.close();

                } catch (Exception ex) {

                    ex.printStackTrace();

                }

            }

        }

    }

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2884070/,如需轉載,請註明出處,否則將追究法律責任。

相關文章