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