Hello RabbitMQ
終於到了使用.Net連接RabbitMQ的時候了,我們首先新建一個控制台應用程序,在程序包管理控制器中NuGet中下載 RabbitMQ。
Install-Package RabbitMQ.Client

安裝完成后,就可以着手做一個RabbitMQ的消息發布程序了。首先 using RabbitMQ.Client;
從工廠中拿到實例, 這里的User不建議使用guest,因為guest被設置了回環,也就是僅在本地可以被登陸,在其它的機器在瀏覽器中是無法使用guest賬戶登陸的,當然在config中可以去設置,但是這是沒有好處的
//從工廠中拿到實例 本地host、用戶admin var factory = new ConnectionFactory() { UserName = "admin", Password = "admin", HostName = "localhost" };
有的朋友會說,我沒有賬戶怎么辦? 可以用到上一篇博文說的ctl去創建一個用戶
rabbitmqctl add_user admin admin
然后為admin用戶設置vhost的權限
rabbitmqctl set_permissions admin '.*' '.*' '.*'
回到代碼中,這時候新建一個連接,因為在連接被使用完后需要釋放,所以我們可以使用using包裹起來
//創建連接 using (var connection = factory.CreateConnection())
有了連接這時候就可以創建一個channl(頻道)了
//創建返回一個新的頻道 using (var channel = connection.CreateModel())
下一步是需要指定一個交換機的,但是RabbitMQ有一個默認的交換機,為了方便所以這一步忽略
聲明一個隊列,然后發布一條消息,這時候可以把項目運行起來了
//聲明隊列 channel.QueueDeclare("firstTest", true, false, false, null); //發布消息 var msg = Encoding.UTF8.GetBytes("Hello RabbitMQ"); channel.BasicPublish(string.Empty, routingKey: "firstTest", basicProperties: null, body: msg);
在Web管理工具中就可以看到我們新加的隊列 firstTest,而且有一條消息
這時候可以寫一個consumer(消費者)客戶端去讀取隊列中的消息
consumer的客戶端不需要發布和創建隊列,也就是除了聲明隊列和發布消息其它都是一致的。所以我們從返回一個新的頻道開始寫起
BasicGet方法返回類型是BasicGetResult,里面有一些基本信息,例如隊列中有多少消息、當前交換機類型、當然還有我們最重要的消息 Body
//獲取消息 var result = channel.BasicGet("firstTest", true);
var msg = Encoding.UTF8.GetString(result.Body);
//打印消息
Console.WriteLine(msg);