1. 程式人生 > >RabbitMQ ——簡單佇列

RabbitMQ ——簡單佇列

一 .概述  

  我們不從開始就講述基本的概念,尤其是在Rabbitmq之中有些概念確實比較難以理解,我們首先做的就是將光放提供的訊息模型

  進行實現,然後再總結一下Rabbitmq之中的基本概念.


二 .基礎的工具類

  我們想使用Rabbitmq,那麼首先需要的就是一個連線,本部分我們首先就說一下獲取連線的方式.

  我們首先搭建我們的測試環境,首先需要做的就是新增我們的依賴包. 

        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.4.0</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

然後我們需要做的就是編寫我們的連線工具類.

  通過下面的程式碼,我們知道我們這個僅僅只是一個我們測試環境下的一個工具類,很多東西都是方便我們使用的而已.

public class ConnectionUtils {
    
    public static Connection getConnection() throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setUsername("admin");
        factory.setPassword("123456");
        return factory.newConnection();
    }
}

在Rabbimtq之中,獲取連線的方式時比較容易的.主要分成下面的三個部分:

[1]建立連線工廠

[2]為連線工廠設定屬性

[3]從連線工廠之中獲取連線.


三,簡單佇列

  

上面的圖中表示的就是簡單佇列的模型.

  其中:P表示的就是訊息的生產者,紅色的部分表示的就是訊息佇列,C表示的就是訊息的消費者.

上面的模型是十分的簡單的,這也是我們首次使用Rabbitmq的最好的一個模型.

看下面最簡單的程式碼:  

public class Send {
    
    public static void main(String[] args) throws Exception{
        
        // 獲取一個連線物件
        Connection connection = ConnectionUtils.getConnection();
        //從連線之中獲取一個Channel物件
        Channel channel = connection.createChannel();
        // 佇列的名稱
        String queueName = "simple_queue";
        // 宣告一個佇列
        channel.queueDeclare(queueName, false, false, false, null);
        
        // 然後向佇列之中傳送訊息
        channel.basicPublish("", queueName, null, "trek".getBytes());
        
        //關閉資源
        channel.close();
        connection.close();
        
    }
}

當我們傳送了一條訊息之後,我們到admin之中看看情況.

 我們從admin之中看到我們確實成功的傳送了一條訊息.

然後下面我們需要編寫我們的消費端的內容.

public class Resv {

    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionUtils.getConnection();

        Channel channel = connection.createChannel();
        
        // 建立一個消費者
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                    byte[] body) throws IOException {
                System.out.println("消費者獲取到的訊息是=="+new String(body));
            }
        };
        
        channel.basicConsume("simple_queue",true, consumer); // 注意這個引數true,如果我們設定為false,我們就需要手動確認訊息的消費,否則這一條訊息無法在中介軟體之中清除掉.
        
    }
}

現在我們看看我們的admin之中的內容,我們發現現在在admin之中的內容如下:

  

從生產者之中傳送的訊息確實被消費掉了.