Я реализую программу чтения очереди сообщений (MQ) для ActiveMQ v5.15.x (для получения сообщений из очередей или тем ActiveMQ) в ASP. NET Core 3.1.
У меня есть класс, представляющий читателя или получателя:
public class MQReader : IMQReader
{
public MQReader(IConfiguration _config, ILogger _logger)
{
// ...setup code of constructor...
}
/*
other methods here
*/
}
Внутри одного из методов читателя я подключаюсь к месту назначения (= ActiveMQ Queue или Topi c) и создаю и добавляю слушателя для этого места назначения.
// ...perform preparations...
consumer = session.CreateConsumer(destination);
consumer.Listener += new Apache.NMS.MessageListener(OnMessage);
connection.Start();
Это означает, что один получатель может представлять 1 .. * слушателей.
В Startup.cs
приложения я настраиваю службу в методе ConfigureServices
, добавляя MQReader
как единое целое:
services.AddSingleton<IMQReader>(new MQReader(configuration, logger));
Мои вопросы относительно подходящего дизайна:
Если приложение прослушивает несколько очередей и тем, я должен создать несколько отдельных потребителей (то есть читателей) ) для них каждое подключение к одному каналу (очередь или топи c)? Это приведет к настройке нескольких отдельных экземпляров синглтона для считывателя в ConfigureServices
. Или я должен реализовать один читатель (таким образом, 1 синглтон добавлен в ConfigureServices
), способный обрабатывать различные очереди / темы?
Какой рекомендуемый подход? Какова лучшая практика для этого сценария?