日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ

發(fā)布時(shí)間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么要使用MQ消息中間件?它解決了什么問(wèn)題?關(guān)于為什么要使用消息中間件?消息中間件是如何做到同步變異步、流量削鋒、應(yīng)用解耦的?網(wǎng)上已經(jīng)有很多說(shuō)明,我這里就不再說(shuō)明。我在接下來(lái)的RabbitMq系列博客里會(huì)將官方的講解翻譯過(guò)來(lái),同時(shí)加以自己的理解整理成博客,希望能和大家共同交流,一起進(jìn)步。

RabbitMq原理圖

1、RabbitMq簡(jiǎn)介

RabbitMq是一個(gè)消息中間件:它接收消息、轉(zhuǎn)發(fā)消息。你可以把它理解為一個(gè)郵局:當(dāng)你向郵箱里寄出一封信后,郵遞員們就能最終將信送到收信人手中。類似的,RabbitMq就好比是一個(gè)郵箱、郵局和郵遞員。RabbitMq和郵局最大的區(qū)別是:RabbitMq接收、轉(zhuǎn)發(fā)的都是二進(jìn)制數(shù)據(jù)塊--消息,而不是紙質(zhì)的數(shù)據(jù)文件。

RabbitMq、消息相關(guān)術(shù)語(yǔ)如下:

生產(chǎn)者:生產(chǎn)者只發(fā)送消息,發(fā)送消息的程序即為生產(chǎn)者:

消息隊(duì)列:消息隊(duì)列就相當(dāng)于RabbitMq中的郵箱名稱。盡管消息在你的程序和RabbitMq中流動(dòng),但它只能存儲(chǔ)在消息隊(duì)列中。隊(duì)列本質(zhì)上是一個(gè)大的消息緩存,它能存多少消息,取決于主機(jī)的內(nèi)存和磁盤(pán)限制。多個(gè)生產(chǎn)者可以往同一個(gè)消息隊(duì)列中發(fā)送消息;多個(gè)消費(fèi)者可以從同一個(gè)隊(duì)列中獲取數(shù)據(jù)。我們以下列圖形來(lái)表示一個(gè)消息隊(duì)列:

消費(fèi)者:消費(fèi)者是一個(gè)等待接收消息的程序:

注意:生產(chǎn)者、消費(fèi)者和RabbitMq可以在不同的機(jī)器上;在很多的應(yīng)用中,一個(gè)生產(chǎn)者同時(shí)也可能是消費(fèi)者。

2、“Hello World!”

在這小節(jié)里,我們將寫(xiě)一個(gè)消息生產(chǎn)者用來(lái)發(fā)送消息、一個(gè)消息消費(fèi)者來(lái)消費(fèi)消息(接收消息并打印出來(lái))。

在下面圖形中,“P”是我們的生產(chǎn)者,“C”是我們的消費(fèi)者,中間的紅框是我們的消息隊(duì)列,保存了從生產(chǎn)者那里接收到的準(zhǔn)備轉(zhuǎn)發(fā)到消費(fèi)方的消息。

Java客戶端類庫(kù)說(shuō)明:

RabbitMq使用多種協(xié)議,本指南使用AMQP 0-9-1協(xié)議,該協(xié)議是一個(gè)開(kāi)源的、通用的消息協(xié)議。RabbitMq有多種語(yǔ)言的客戶端,這里我們使用JAVA語(yǔ)言的客戶端做實(shí)驗(yàn)。通過(guò)以下地址下載RabbitMq客戶端jar包和依賴包:

amqp-client-5.5.1.jar

slf4j-api-1.7.25.jar

slf4j-simple-1.7.25.jar

把這三個(gè)jar包拷貝到你的工作目錄,包括后面教程要新建的java文件。

2.1 發(fā)送消息

生產(chǎn)者連接RabbitMq,發(fā)送一條簡(jiǎn)單的消息”Hello World!“后就退出。

在Send.java類中,需要引入以下依賴包:

1 import com.rabbitmq.client.ConnectionFactory;2 import com.rabbitmq.client.Connection;3 import com.rabbitmq.client.Channel;復(fù)制代碼

給隊(duì)列起個(gè)名字:

1 public class Send {2 private final static String QUEUE_NAME = "hello";3 public static void main(String[] argv) throws Exception {4 ...5 }6 }復(fù)制代碼

創(chuàng)建連接到服務(wù)器的連接Collection:

1 onnectionFactory factory = new ConnectionFactory();2 factory.setHost("localhost");3 try (Connection connection = factory.newConnection();4 Channel channel = connection.createChannel()) {5 6 }復(fù)制代碼

這個(gè)連接即套接字連接,為我們處理協(xié)議版本協(xié)商和身份驗(yàn)證等。這里我們連接一個(gè)本地的RabbitMq:因此是localhost,如果你想要連接一個(gè)遠(yuǎn)程機(jī)器上的RabbitMq,只需要把localhst改成那臺(tái)機(jī)器的計(jì)算機(jī)名或是IP地址。

創(chuàng)建完連接之后,我們繼續(xù)創(chuàng)建一個(gè)信道:Channel。我們需要使用try-with-resource表達(dá)式,因?yàn)镃onnection和Channel都實(shí)現(xiàn)了JAVA接口Closeable,屬于資源,需要關(guān)閉,這樣我們就不需要顯示地在我們的代碼中進(jìn)行關(guān)閉了。(關(guān)于信道,請(qǐng)參考文章最頂部的RabbitMq原理圖,是TCP里面的虛擬鏈接,例如:電纜相當(dāng)于一個(gè)TCP,信道就是里面的一個(gè)獨(dú)立光纖,一條TCP上面創(chuàng)建多條信道是沒(méi)有問(wèn)題的;TCP一旦打開(kāi)就分創(chuàng)建AMQP信道;無(wú)論是發(fā)布消息、接收消息、訂閱隊(duì)列,這些動(dòng)作都是通過(guò)信道完成的)。

為了發(fā)送消息,我們還必須要定義一個(gè)需要發(fā)送到的消息隊(duì)列,這些都要使用try-with-resource表達(dá)式:

1 channel.queueDeclare(QUEUE_NAME, false, false, false, null);2 String message = "Hello World!";3 channel.basicPublish( 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的vs如何实现tcp连续发送多条消息_消息队列之 RabbitMQ的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。