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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

RabbitMQ入门HelloWorld(C#)(翻译)

發(fā)布時(shí)間:2025/3/15 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ入门HelloWorld(C#)(翻译) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

介紹

?

先決條件

本教程假定RabbitMQ已安裝并在標(biāo)準(zhǔn)端口(5672)上的本地主機(jī)上運(yùn)行。如果您使用不同的主機(jī),端口或憑據(jù),連接設(shè)置將需要調(diào)整。

在哪里得到幫助

如果您在閱讀本教程時(shí)遇到困難,可以?通過郵件列表與我們聯(lián)系。

RabbitMQ是一個(gè)消息代理:它接受和轉(zhuǎn)發(fā)消息。你可以把它想象成一個(gè)郵局:當(dāng)你把郵件放在郵箱里時(shí),你可以確定郵差先生最終會(huì)把郵件發(fā)送給你的收件人。在這個(gè)比喻中,RabbitMQ是郵政信箱,郵局和郵遞員。

RabbitMQ與郵局的主要區(qū)別是它不處理紙張,而是接受,存儲(chǔ)和轉(zhuǎn)發(fā)數(shù)據(jù)消息的二進(jìn)制數(shù)據(jù)塊。

RabbitMQ和一般的消息傳遞使用了一些術(shù)語。

  • 生產(chǎn)只不過是發(fā)送而已。一個(gè)發(fā)送消息的程序是一個(gè)生產(chǎn)者:

    ?

  • 隊(duì)列是RabbitMQ內(nèi)部的郵箱名稱。盡管消息流經(jīng)RabbitMQ和您的應(yīng)用程序,但它們只能存儲(chǔ)在隊(duì)列中。甲隊(duì)列僅由主機(jī)的存儲(chǔ)器&磁盤限制約束,它本質(zhì)上是一個(gè)大的消息緩沖器。許多生產(chǎn)者可以發(fā)送消息到一個(gè)隊(duì)列,許多消費(fèi)者可以嘗試從一個(gè)隊(duì)列接收數(shù)據(jù)。這就是我們代表隊(duì)列的方式:

    ?

  • 消費(fèi)與接受有類似的意義。一個(gè)消費(fèi)者是一個(gè)程序,主要是等待接收信息:

    ?

請(qǐng)注意,生產(chǎn)者,消費(fèi)者和經(jīng)紀(jì)人不必駐留在同一主機(jī)上;?事實(shí)上在大多數(shù)應(yīng)用程序中,他們沒有

?

“你好,世界”

(使用.NET / C#客戶端)

在本教程的這一部分,我們將用C#編寫兩個(gè)程序。發(fā)送單個(gè)消息的生產(chǎn)者,以及接收消息并將其打印出來的消費(fèi)者。我們將詳細(xì)介紹.NET客戶端API中的一些細(xì)節(jié),僅僅著重于這個(gè)非常簡(jiǎn)單的事情來開始。這是一個(gè)消息傳遞的“Hello World”。

在下圖中,“P”是我們的生產(chǎn)者,“C”是我們的消費(fèi)者。中間的盒子是一個(gè)隊(duì)列 - 一個(gè)RabbitMQ代表消費(fèi)者的消息緩沖區(qū)。

.NET客戶端庫(kù)

RabbitMQ提供多種協(xié)議。本教程使用AMQP 0-9-1,這是一個(gè)開放,通用的消息傳遞協(xié)議。RabbitMQ有許多不同的語言客戶端。我們將使用RabbitMQ提供的.NET客戶端。

客戶端支持.NET Core以及.NET Framework 4.5.1+。本教程將使用RabbitMQ .NET客戶端5.0和.NET核心,因此您將確保您已安裝并在PATH中。

您也可以使用.NET Framework來完成本教程,但設(shè)置步驟會(huì)有所不同。

RabbitMQ .NET客戶端5.0和更高版本通過nuget分發(fā)。

本教程假定您在Windows上使用PowerShell。在MacOS和Linux上,幾乎所有的shell都可以運(yùn)行。

建立

首先讓我們驗(yàn)證你在PATH中有.NET Core工具鏈:

dotnet --help

應(yīng)該產(chǎn)生一個(gè)幫助信息。

現(xiàn)在讓我們生成兩個(gè)項(xiàng)目,一個(gè)是發(fā)布者,另一個(gè)是消費(fèi)者:

dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs

這將創(chuàng)建兩個(gè)名為發(fā)送和接收的新目錄。

然后我們添加客戶端依賴項(xiàng)。

cd Send dotnet add package RabbitMQ.Client dotnet restore cd ../Receive dotnet add package RabbitMQ.Client dotnet restore

現(xiàn)在我們已經(jīng)建立了.NET項(xiàng)目,我們可以編寫一些代碼。

發(fā)出

我們將調(diào)用我們的消息發(fā)布者(發(fā)送者)Send.cs和我們的消息使用者(接收者)?Receive.cs。發(fā)布者將連接到RabbitMQ,發(fā)送一條消息,然后退出。

在?Send.cs中,我們需要使用一些命名空間:

using System; using RabbitMQ.Client; using System.Text;

設(shè)置課程:

class Send {public static void Main() { ... } }

那么我們可以創(chuàng)建一個(gè)到服務(wù)器的連接:

class Send {public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { ... } } } }

連接抽象出套接字連接,并為我們處理協(xié)議版本協(xié)商和認(rèn)證等。在這里,我們連接到本地機(jī)器上的代理 - 因此是?本地主機(jī)。如果我們想連接到另一臺(tái)機(jī)器上的經(jīng)紀(jì)人,我們只需在此指定其名稱或IP地址。

接下來我們創(chuàng)建一個(gè)頻道,這是完成大部分API的地方。

發(fā)送,我們必須申報(bào)隊(duì)列給我們發(fā)送;?那么我們可以發(fā)布消息到隊(duì)列中:

using System; using RabbitMQ.Client; using System.Text;class Send { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine(" [x] Sent {0}", message); } Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } }

聲明一個(gè)隊(duì)列是冪等的 - 只有當(dāng)它不存在時(shí)才會(huì)被創(chuàng)建。消息內(nèi)容是一個(gè)字節(jié)數(shù)組,所以你可以編碼任何你喜歡的地方。

當(dāng)上面的代碼完成運(yùn)行時(shí),通道和連接將被處理。這是我們的出版商。

這是整個(gè)Send.cs類。

發(fā)送不起作用!

如果這是您第一次使用RabbitMQ,并且您沒有看到“已發(fā)送”消息,那么您可能會(huì)抓住您的腦袋,想知道會(huì)出現(xiàn)什么問題。也許代理啟動(dòng)時(shí)沒有足夠的可用磁盤空間(默認(rèn)情況下它至少需要50 MB空間),因此拒絕接受消息。檢查代理日志文件以確認(rèn)并在必要時(shí)減少限制。該配置文件文檔會(huì)告訴你如何設(shè)置disk_free_limit。

接收

至于消費(fèi)者,它是從RabbitMQ推送消息。因此,與發(fā)布單個(gè)消息的發(fā)布者不同,我們將不斷地運(yùn)行消費(fèi)者來收聽消息并將其打印出來。

代碼(在Receive.cs中)與Send有幾乎相同的使用語句:

using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text;

設(shè)置與發(fā)布者相同;?我們打開一個(gè)連接和一個(gè)通道,并聲明我們將要使用的隊(duì)列。請(qǐng)注意,這與發(fā)送到發(fā)布的隊(duì)列相匹配。

class Receive {public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); ... } } } }

請(qǐng)注意,我們也在這里聲明隊(duì)列。因?yàn)槲覀兛赡軙?huì)在發(fā)布者之前啟動(dòng)消費(fèi)者,所以我們希望確保隊(duì)列存在,然后再嘗試使用消息。

我們即將告訴服務(wù)器將隊(duì)列中的消息傳遞給我們。由于它會(huì)異步推送消息,因此我們提供回調(diào)。這就是EventingBasicConsumer.Received事件處理程序所做的事情。

using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text;class Receive { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } }

這是整個(gè)Receive.cs類。

把它放在一起

打開兩個(gè)終端。

運(yùn)行消費(fèi)者:

cd Receive dotnet run

然后運(yùn)行生產(chǎn)者:

cd Send dotnet run

消費(fèi)者將通過RabbitMQ打印從發(fā)布者處獲得的消息。消費(fèi)者將繼續(xù)運(yùn)行,等待消息(使用Ctrl-C停止它),所以嘗試從另一個(gè)終端運(yùn)行發(fā)布者。

轉(zhuǎn)載于:https://www.cnblogs.com/moyhui/p/8309062.html

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的RabbitMQ入门HelloWorld(C#)(翻译)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲人妻电影一区 | 日本丰满大乳奶做爰 | 欧美黄页网站 | 麻豆三级在线观看 | 日韩精品免费一区二区三区竹菊 | 天天尻逼 | 久久大伊人 | 午夜精品福利视频 | 日韩成人综合网 | 日本在线视频www色 国产在线视频网址 | 公侵犯人妻中文字慕一区二区 | 蜜臀av一区二区三区有限公司 | 亚洲国语| 日韩手机看片 | 夜夜躁很很躁日日躁麻豆 | 国产视频精品一区二区三区 | 亚洲欧美视频在线播放 | 狠狠躁18三区二区一区视频 | 谁有毛片网站 | 狠狠人妻久久久久久综合麻豆 | 亚洲欧洲av在线 | 欧美三级视频 | 欧美日本在线 | 日韩一区二区久久 | 2018天天弄| 极品五月天 | 黄色一级视频网站 | 2024av| 一区二区三区四区亚洲 | 香港三日本8a三级少妇三级99 | 人妻精品一区二区在线 | 天天干天天爽天天操 | 一区二区三区啪啪啪 | 中文字幕一区视频 | 亚洲美女视频 | 丝袜人妻一区 | 一区二区三区欧美在线 | 自拍在线视频 | 欧美一级无毛 | 中文字幕高清av | xxxxxhd亚洲人hd | 一级久久久久久久 | 91狠狠爱| 91尤物视频在线观看 | 亚洲在线视频免费观看 | 91 免费看片 | 五月婷婷深深爱 | 日本一区二区成人 | 91嫩草影视| 国产精品久久久久久妇女 | 国产精品呻吟久久 | 欧美一区三区二区在线观看 | 97超碰人人看| 黑人乱码一区二区三区av | 天天插夜夜爽 | 大屁股一区二区三区 | 骚婷婷| 精品人妻无码专区在线 | 国产精品国产精品国产专区 | 浮妇高潮喷白浆视频 | 亚洲人成色777777精品音频 | 亚洲拍拍视频 | 午夜av网站 | 一区二区精品在线观看 | 婷婷四房综合激情五月 | 青娱乐自拍视频 | 99婷婷| 国产高清视频一区二区 | 波多野结衣av一区二区全免费观看 | 国产在线一区二区三区四区 | 操丰满女人 | 欧美在线不卡视频 | 国产欧美在线精品日韩 | 久久中文字幕一区 | 欧美大色 | 人乳videos巨大吃奶 | 国产亚洲视频在线观看 | 中文字幕在线观看精品 | 成人性生交大片免费看96 | 午夜福利一区二区三区 | 久久精品久久久久久 | 色天堂视频 | 欧美日韩国产在线一区 | 精品+无码+在线观看 | 91在线精品李宗瑞 | 怡红院亚洲 | 久热色| 在线免费观看黄网站 | 午夜精产品一区二区在线观看的 | 久久网页 | 99热最新在线 | 激情综合视频 | 久草不卡 | 狠狠撸在线视频 | 久久久九九 | 午夜在线看 | www.白虎 | 国产精品ⅴa有声小说 | 亚洲欧洲在线播放 |