Чтение ActiveMQ из нескольких очередей или разделов - Создание одного или нескольких получателей? - PullRequest
2 голосов
/ 09 марта 2020

Я реализую программу чтения очереди сообщений (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), способный обрабатывать различные очереди / темы?

Какой рекомендуемый подход? Какова лучшая практика для этого сценария?

...