vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ
為什么要使用MQ消息中間件?它解決了什么問題?關于為什么要使用消息中間件?消息中間件是如何做到同步變異步、流量削鋒、應用解耦的?網上已經有很多說明,我這里就不再說明。我在接下來的RabbitMq系列博客里會將官方的講解翻譯過來,同時加以自己的理解整理成博客,希望能和大家共同交流,一起進步。
RabbitMq原理圖
1、RabbitMq簡介
RabbitMq是一個消息中間件:它接收消息、轉發消息。你可以把它理解為一個郵局:當你向郵箱里寄出一封信后,郵遞員們就能最終將信送到收信人手中。類似的,RabbitMq就好比是一個郵箱、郵局和郵遞員。RabbitMq和郵局最大的區別是:RabbitMq接收、轉發的都是二進制數據塊--消息,而不是紙質的數據文件。
RabbitMq、消息相關術語如下:
生產者:生產者只發送消息,發送消息的程序即為生產者:
消息隊列:消息隊列就相當于RabbitMq中的郵箱名稱。盡管消息在你的程序和RabbitMq中流動,但它只能存儲在消息隊列中。隊列本質上是一個大的消息緩存,它能存多少消息,取決于主機的內存和磁盤限制。多個生產者可以往同一個消息隊列中發送消息;多個消費者可以從同一個隊列中獲取數據。我們以下列圖形來表示一個消息隊列:
消費者:消費者是一個等待接收消息的程序:
注意:生產者、消費者和RabbitMq可以在不同的機器上;在很多的應用中,一個生產者同時也可能是消費者。
2、“Hello World!”
在這小節里,我們將寫一個消息生產者用來發送消息、一個消息消費者來消費消息(接收消息并打印出來)。
在下面圖形中,“P”是我們的生產者,“C”是我們的消費者,中間的紅框是我們的消息隊列,保存了從生產者那里接收到的準備轉發到消費方的消息。
Java客戶端類庫說明:
RabbitMq使用多種協議,本指南使用AMQP 0-9-1協議,該協議是一個開源的、通用的消息協議。RabbitMq有多種語言的客戶端,這里我們使用JAVA語言的客戶端做實驗。通過以下地址下載RabbitMq客戶端jar包和依賴包:
amqp-client-5.5.1.jar
slf4j-api-1.7.25.jar
slf4j-simple-1.7.25.jar
把這三個jar包拷貝到你的工作目錄,包括后面教程要新建的java文件。
2.1 發送消息
生產者連接RabbitMq,發送一條簡單的消息”Hello World!“后就退出。
在Send.java類中,需要引入以下依賴包:
1 import com.rabbitmq.client.ConnectionFactory;2 import com.rabbitmq.client.Connection;3 import com.rabbitmq.client.Channel;復制代碼給隊列起個名字:
1 public class Send {2 private final static String QUEUE_NAME = "hello";3 public static void main(String[] argv) throws Exception {4 ...5 }6 }復制代碼創建連接到服務器的連接Collection:
1 onnectionFactory factory = new ConnectionFactory();2 factory.setHost("localhost");3 try (Connection connection = factory.newConnection();4 Channel channel = connection.createChannel()) {5 6 }復制代碼這個連接即套接字連接,為我們處理協議版本協商和身份驗證等。這里我們連接一個本地的RabbitMq:因此是localhost,如果你想要連接一個遠程機器上的RabbitMq,只需要把localhst改成那臺機器的計算機名或是IP地址。
創建完連接之后,我們繼續創建一個信道:Channel。我們需要使用try-with-resource表達式,因為Connection和Channel都實現了JAVA接口Closeable,屬于資源,需要關閉,這樣我們就不需要顯示地在我們的代碼中進行關閉了。(關于信道,請參考文章最頂部的RabbitMq原理圖,是TCP里面的虛擬鏈接,例如:電纜相當于一個TCP,信道就是里面的一個獨立光纖,一條TCP上面創建多條信道是沒有問題的;TCP一旦打開就分創建AMQP信道;無論是發布消息、接收消息、訂閱隊列,這些動作都是通過信道完成的)。
為了發送消息,我們還必須要定義一個需要發送到的消息隊列,這些都要使用try-with-resource表達式:
1 channel.queueDeclare(QUEUE_NAME, false, false, false, null);2 String message = "Hello World!";3 channel.basicPublish( 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL自动备份到本地数据库_MYSQ
- 下一篇: mysql8.0.13安装版_windo