[RabbitMQ]新手入門來個Hello world吧

[RabbitMQ]新手入門來個Hello world吧

前言

RabbitMq是一種可以讓伺服器端主動通知,而讓其他主機去接收通知,並做出相對應的動作,這種機制有很多種,比如DDS協議MQTT協議AMQP協議等等,有興趣去補這方面的知識,可以去參考(https://read01.com/zh-tw/z6xKKP.html#.WzoP39UzZaR),而RabbitMq則是使用AMQP協議去完成這件事情,最簡單好懂的白話文就是訂閱與通知(pub sub),此篇想來筆記如何安裝環境和簡單的Hello World example。

安裝rabbitmq

在此筆者是在自己電腦安裝了rabbitmq server,但實際上這個應該是要安裝在你想發送的機器上,我們先來訪問官網吧(https://www.rabbitmq.com/),在此可以直接按下Get Started到download的連結

接著視自己的平台需求下載安裝,以筆者為例則是安裝了windows平台的版本,另外一點是你必須安裝Erlang這個程式語言,官方有說明目前support的語言版本為19.3-20.3x,筆者自己是安裝了19.3版本的

首先筆者先下載Erlang

安裝的方面就一直下一步就好了,接著我是建立一個專案來完成pub的動作,而此專案也就是rabbitmq的server部份,首先我們先使用nuget來下載rabbitmq client的部份

Pub Sub example示例

完成之後我們就來個pub的hello world的example

var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
	channel.QueueDeclare(queue: "test",
						 durable: false,
						 exclusive: false,
						 autoDelete: false,
						 arguments: null);

	string message = "Hello World!";
	var body = Encoding.UTF8.GetBytes(message);

	channel.BasicPublish(exchange: "",
						 routingKey: "test",
						 basicProperties: null,
						 body: body);
	Console.WriteLine(" [x] Sent {0}", message);
}

接著接收端筆者是使用.net core建立一個web api專案,所以筆者便把註冊的程式碼寫在Startup.cs的ConfigureServices裡面

public void ConfigureServices(IServiceCollection services)                    
{                                                                             
    var factory = new ConnectionFactory() { HostName = "localhost" };         
                                                                              
    var connection = factory.CreateConnection();                              
    var channel = connection.CreateModel();                                   
    channel.QueueDeclare(queue: "test",                                       
             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);                          
    };                                                                        
    channel.BasicConsume(queue: "test",                                       
                         autoAck: true,                                       
                         consumer: consumer);                                 
    services.AddMvc();                                                        
}                                                                             

訪問RabbitMQ提供的web介面,來觀察狀況,我們可以直接訪問(localhost:15672)

安裝RabbitMQ的一些雷

因為筆者為了記鍵blog,結果移除的時候,其實並未移除乾淨,所以會造成安裝完service並沒有正確安裝,所以我們移除的時候,必須要手動去regedit去移除key值,請先開啟regedit,接著參考以下層級一一展開,並把RabbitMQ整個移除,重新安裝就行了

HKEY_LOCAL_MACHINE\SOFTWARE\Ericsson\Erlang\ErlSrv\1.1\RabbitMQ

無法訪問監控頁面

最近筆者新安裝了RabbitMq最簡單的看有沒有安裝成功,就是直接訪問http://localhost:15672/,但始終訪問不到,google一下,只要打了指令就能開啟

rabbitmq-plugins enable rabbitmq_management

但在command line打入指令卻沒有反應


想來也很合理,畢竟我們安裝的是exe檔,並不是msi檔,所以環境變數沒有也很合理,最後腦殘的筆者發現了,安裝的時候有順便安裝了rabbitMq的cmd執行,按此執行就可以使用rabbitmq的一堆cmd指令了