Потребитель Rabbit MQ как сервис в Ubuntu Linux
У меня есть простое приложение подписчика Rabbit MQ, написанное на.net core 2.0, как указано в следующем коде.
static void Main(string[] args)
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "rpc_queue",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
// my custom logic goes here
};
channel.BasicConsume(queue: "rpc_queue",
autoAck: true,
consumer: consumer);
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
Мне нужно преобразовать это в службу демона Linux и создать следующий файл службы systemD.
[Unit]
Description=Demo service
After=network.target
[Service]
ExecStart=/usr/bin/dotnet /srv/sample/rabbit_sub.dll
Restart=on-failure
[Install]
WantedBy=multi-user.target
Приложение работает нормально, когда я выполняю его самостоятельно. т.е.
dotnet rabbit_sub.dll
Но когда служба запускается, она запускается один раз и выполняется следующим образом.
rabbit.service - Demo service
Loaded: loaded (/etc/systemd/system/rabbit.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2017-12-13 11:29:40 +0530; 7s ago
таким образом, текущее состояние мертвое, и оно больше не слушает очередь. Я думаю проблема в том Console.Readline();
неприменимо, когда оно работает как служба и код не будет там храниться. Мне нужно это сервисное приложение для прослушивания очереди кроликов и вызова consumer.Received += (model, ea)
событие, когда в очереди появляется новое сообщение.
Было бы здорово, если бы кто-нибудь мог помочь мне преобразовать это в службу демона Linux.