[英]Rabbit Mq as Task Runner
我是RabbitMQ集成的初學者。 我正在使用RabbitMq做一些實驗,並將其作為任務運行器。
例如:假設我有一個Tasks類,它具有一個稱為Foo ()的方法。
public static string Foo(string test, int id)
{
return "Admin" + test + id.ToString();
}
我還有一個名為Producer的類,該類聲明Queue for RabbitMQ。
using (var conn = factory.CreateConnection())
{
using (var channel = conn.CreateModel())
{
channel.QueueDeclare(queue: "KKQueue", durable: false, exclusive: false, autoDelete: false, arguments: null);
var message = "Hello World";
channel.BasicPublish(exchange: string.Empty, routingKey: "KKQueue", basicProperties: null, body: Encoding.UTF8.GetBytes(message ));
Console.WriteLine(" [x] Sent {0}", message);
}
Console.WriteLine(" Press [enter] to exit.");
}
在這里,我們必須將字符串作為消息傳遞給消費者。
消費者類代碼將消耗此隊列消息
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "KKQueue", durable: false, exclusive: false, autoDelete: false, arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var message = Encoding.UTF8.GetString(ea.Body);
Console.WriteLine(" [x] Received {0}", message);
};
channel.BasicConsume(queue: "KKQueue", noAck: true, consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
這正在接受字符串消息 。 有沒有一種方法,我可以將函數調用傳遞給Producer或Rabbit MQ Queue,然后讓Consumee執行隊列中的那些函數調用。
我嘗試通過序列化/反序列化對象,然后使用反射在消費者代碼中調用該方法。.我正在尋找使用委托或其他方法的替代解決方案。 任何幫助將不勝感激。
不,你不能。 您需要用消息“運送”所有匯編代碼,這絕對是一個非常糟糕的主意。
您應該將任務代碼庫添加到消費者應用程序,然后使用該消息來控制任務執行,但不要隨其發送可執行代碼。
我個人將MassTransit用於這種生產者/消費者方案。 例如,您可以有多個使用者,每個使用者一個,並且您可以激活適當的使用者,只需通過RMQ發送不同類型的消息即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.