RabbitMQ ——簡單佇列
阿新 • • 發佈:2018-11-10
一 .概述
我們不從開始就講述基本的概念,尤其是在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之中的內容如下:
從生產者之中傳送的訊息確實被消費掉了.