译:1. RabbitMQ Java Client 之 Hello World
這些教程介紹了使用RabbitMQ創建消息傳遞應用程序的基礎知識。您需要安裝RabbitMQ服務器才能完成教程
1. 打造第一個Hello World 程序
RabbitMQ是一個消息代理:它接受和轉發消息。你可以把它想象成一個郵局:當你把你想要發布的郵件放在郵箱里時,你可以確定先生或女士郵遞員最終將郵件發送給你的收件人。
在這個比喻中,RabbitMQ是郵政信箱,郵局和郵遞員。
RabbitMQ和郵局的主要區別在于它不處理紙張,而是接受,存儲和轉發二進制數據塊 - 消息。
英文原文地址:https://www.rabbitmq.com/tutorials/tutorial-one-java.html
2 "Hello World"使用 Java 客戶端
在本教程的這一部分中,我們將用Java編寫兩個程序; 一個發送單個消息的生產者,以及接收消息并將其打印出來的消費者。
我們將詳細介紹Java API中的一些細節,專注于這個非常簡單的事情,以便開始使用。 這是一個消息傳遞的“Hello World”。
在下圖中,“P”是我們的生產者,“C”是我們的消費者。 中間的盒子是一個隊列 - RabbitMQ代表消費者保存的消息緩沖區。
?
RabbitMQ?有許多不同語言的RabbitMQ客戶端。 這里我們將使用RabbitMQ提供的Java客戶端。
2.1? 下載相關依賴Jar 包
下載RabbitMQ提供的Java客戶端以及它的依賴(SLF4J API?and?SLF4J Simple)
將這些文件復制到工作目錄中,并跟著教程復制Java文件。
Tips:
RabbitMQ Java客戶端也位于中央Maven存儲庫中,其中包含groupId?com.rabbitmq和artifactId?amqp-client。
請注意SLF4J Simple對于教程來說已經足夠了,但是您應該在生產環境中使用像Logback?這樣的完整日志庫。
?關于Maven 等其他下載方式請移步
Java Client
- On Maven Central:?RabbitMQ Java client.
- Quick download:?Binary?|?Source
- Javadoc
- All Java client downloads
- Older versions
2.2 編寫代碼
我們擁有Java客戶端及其依賴關系,那么我們接下來開始寫代碼。
由于是學習使用RabbitMQ,我們這里使用?STS?來寫這個項目。
1. 打開STS,新建一個名字叫做?RabbitMQ_HelloWorld_Sample? 的 Java Project。
2. 新建一個叫做libs的文件夾,我們將上面三個jar 復制到我們的項目中,然后并添加依賴
?
?完成后項目結構如圖所示
3. 編寫生產者類
我們會打電話給我們的消息發布者(發送者)發送和我們的消息使用者(接收者)Recv。 發布者將連接到RabbitMQ,發送一條消息,然后退出
創建Send.java 文件,關于代碼的講解在注釋里:
import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory;public class Send {//設置消息隊列的名稱private final static String QUEUE_NAME="hello"; public static void main(String[] args) throws java.io.IOException, TimeoutException{ /** * 創建一個到RabbitMQ Server 的連接 * 連接抽象出套接字連接,并為我們處理協議版本協商和身份驗證等。 * 在這里,我們連接到本地機器上的代理 - 因此是本地主機。 * 如果我們想連接到另一臺機器上的代理,我們只需在此指定其名稱或IP地址。 * */ ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); /** * 接下來我們創建一個Channel 對象,這是大部分用于完成任務的API駐留的地方。 * 要想發送出去,我們必須聲明一個隊列來執行發送,那么我們可以將消息發布到隊列中: * */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; //聲明一個隊列是冪等的 - 只有當它不存在時才會被創建。 //消息內容是一個字節數組,所以你可以編碼任何你喜歡的地方。 channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println(" [x] Sent '" + message + "'"); //最后我們關閉這些連接對象 channel.close(); connection.close(); } }??執行成功后你將看到這樣的內容:
Tips: ,
如果這是您第一次使用RabbitMQ,并且您沒有看到“已發送”消息,那么您可能會抓住您的頭腦,想知道會出現什么問題?
也許代理啟動時沒有足夠的可用磁盤空間(默認情況下它至少需要200 MB空閑空間),因此拒絕接受消息。
檢查代理日志文件以確認并在必要時減少限制。 配置文件文檔將告訴你如何設置disk_free_limit。
還有一種可能是你的RabbitMQ 沒有啟動,執行下面命令再次嘗試即可。
rabbitmq-service.bat start?4. 編寫消費者
這就是我們的出版商。 我們的消費者推送來自RabbitMQ的消息,因此與發布單個消息的發布者不同,我們將繼續運行以收聽消息并將其打印出來。
創建一個Recv.java 文件,代碼講解在注釋里面
import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection;import java.io.IOException; import java.util.concurrent.TimeoutException;import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; /** * 消費者 * 額外的DefaultConsumer是一個實現Consumer接口的類,我們將使用它來緩存由服務器推送給我們的消息。 * */ public class Recv { private final static String QUEUE_NAME="hello"; public static void main(String[] args) throws IOException, TimeoutException { /** * 設置與發布者相同; * 我們打開一個連接和一個通道,并聲明我們將要使用的隊列。 * 請注意,這與發送發布到的隊列相匹配 * */ ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); /** * 請注意,我們也在這里聲明隊列。 * 因為我們可能會在發布者之前啟動消費者,所以我們希望在我們嘗試使用消息之前確保隊列已存在。 * */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); /** * 我們即將告訴服務器將隊列中的消息傳遞給我們。 * 由于它會異步推送消息,因此我們以對象的形式提供回調,該消息將緩沖消息,直到我們準備好使用它們。 * 這是一個DefaultConsumer子類的作用。 * */ Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(" [x] Received '" + message + "'"); } }; channel.basicConsume(QUEUE_NAME, true, consumer); } }執行成功后
我們可以看到我們的消費者收到了消息隊列生產者剛發布的消息。
本篇完~
轉載于:https://www.cnblogs.com/xingyunblog/p/9761344.html
總結
以上是生活随笔為你收集整理的译:1. RabbitMQ Java Client 之 Hello World的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五大主流浏览器及内核
- 下一篇: 分式递推