[RabbitMQ]包裝得很簡單的RabbitMQ-使用EasyNetQ

[RabbitMQ]包裝得很簡單的RabbitMQ-使用EasyNetQ

我們在使用RabbitMQ的時候,通常都會再進行封裝,但是自行封裝有一些缺點,就是我們必須對要包裝的工具非常熟悉,再來就是我們需要反覆測試,有問題得想辦法排除,我個人則比較傾向於使用人家包裝好的,畢竟公開原始碼有很多人幫忙測試的,而且EasyNetQ到目前為止一直都還有在更新,這可幫助我們把時間花在真正需要解決的使用者需求上面,此篇來比較一下使用EasyNetQ和原始RabbitMq使用的差別來比對,顯現我們使用EasyNetQ的好處在哪邊。

下載EasyNetQ

我們一樣使用nuget來下載,然後再完成上一個範例的程式碼來比對,用nuget來下載EasyNetQ

下載完成之後就來重覆上一次的範例,首先是Pub的部份

using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
	bus.Send("test","Hello World");
}

接著則是Sub的部份

var bus = RabbitHutch.CreateBus("host=localhost");
bus.Receive<string>("test", x =>                  
{                                                 
    Console.Write(x);                             
});                                               

好,已完成上個Hello World的範例了,相對一下如果我們使用RabbitMQ的程式碼比對,整個顯得非常精簡啊,下面是要完成一樣範例使用RabbitMQ的程式碼

RabbitMQ pub

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);
}

sub

                                                                          
    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);