友情提示
我對個人文章負責,發現好多網上的文章 沒有實踐,都發出來的,讓人走不少彎路,若是你在個人文章中遇到沒法實現,或者沒法走通的問題。能夠直接在公衆號《愛碼農愛生活 》留言。一定會再次複查緣由。讓每一篇 文章都能順利實現。道理講明白 。原理講清楚。代碼必實現html
安裝好Rabbitmq-server,Erlang後,在vs中添加 Rabbitmq.client.創建兩個控制檯應用,實現單生產者單消費者的模式。git
我對個人文章負責,發現好多網上的文章 沒有實踐,都發出來的,讓人走不少彎路,若是你在個人文章中遇到沒法實現,或者沒法走通的。能夠直接公衆號:愛碼農愛生活 留言。一定會再次複查緣由。讓每一篇 文章的流程都能順利實現。github
提示沒有安裝elang,要先下載安裝erlangc#
會自動打開Erlang的下載連接 地址。個人是win7 64位系統,因此我選擇下面紅框裏的這個
api
今天終於下載下來了。 爲了不之後由於網絡問題下不下來,直接備份到百度雲數組
連接:https://pan.baidu.com/s/1aTEtVwNvSV58gzbmLncQlA 提取碼:3b1x服務器
Open Telecom Platform的縮寫,簡單理解就是一個框架 ,主要是把通用部分代碼和業務代碼進行分離。具體想多瞭解的能夠參考:https://www.cnblogs.com/john-d/archive/2010/04/16/1711276.html網絡
安裝OTP22 ,直接打開,安裝到本身的程序目錄就行。 一直next到結束 。框架
直接打開,安裝到本身的程序目錄就行。 一直next到結束測試
https://github.com/rabbitmq/rabbitmq-tutorials
Rabbitmq是一個消息中間件,生產者生產消息放入隊列中,消費者從隊列中拿消息進行消費。
分別給兩個項目安裝RabbitMQ.client依賴包。 若是用這種方式安裝的話,產生的項目是netcore的
好了,vs打開啓動項目
不過遇到vs不能調試的錯誤了。,記得之前也遇到過這個問題,網上好多人說是把msvsmon.exe從別的地方複製一份就能夠了,可是個人不行,最後是經過添加刪除程序解決的。
感受這個錯誤,好像會出如今多個vs版本的時候會容易出現混亂。
可是發現新建的程序臺程序是可使用的。
這個先不用管了直接轉爲傳統的方式,vs打開項目,Nuget添加RabbitMq.client進行測試
從新在console控制檯裏操做吧。
先安裝RabbitMQ.Client
生產者代碼:
注意:建立的連接若是是遠程服務器,要換成遠程服務器的IP地址,咱們是用localhost在本地測試
建立完連接之後,再建立信道。大多數的api調用都是在信道中完成的。
最後聲明一個隊列,把咱們要發送的消息發送出去。
消息的內容在隊列中存的是了一個字節數組 ,咱們通常用Encoding.UTF8.GetBytes
static void Main(string[] args) { 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(""); Console.ReadLine(); }
消費者從消息隊列中監聽消息 ,要保持持續鏈接
代碼:
注意:
1. Console.ReadLine();的位置,要放在channel代碼塊中。
static void Main(string[] args) { 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 += (sender, e) => { var body = e.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine("Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); Console.WriteLine(""); Console.ReadLine(); } } }
代碼下載:
連接:https://pan.baidu.com/s/1ETUFWm2ilTY4eONkSqaz-A 提取碼:bims