簡體   English   中英

Rabbit Mq作為任務運行器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM