Позвольте мне сначала описать, как я планирую использовать activemq для моей службы.
Сервис предоставляет API для своих клиентов и гарантирует уведомление всех, кто интересуется изменениями, произошедшими с его данными. Например, если создается новый пользователь, каждый пользователь API должен иметь возможность получать уведомления об этом и запрашивать новую информацию, если он хочет (или обрабатывать уведомление любым другим способом). Для реализации этих уведомлений я использую activemq. Уведомления отправляются в виде постоянных сообщений в соответствующие темы, например, "Service.User"
и, следовательно, каждый, кто хочет получать уведомления о новых пользователях, может просто внедрить долговременного потребителя для получения сообщений из этой темы.
Мне не так много тем, но объем сообщений может быть довольно высоким - я ожидаю около 100-200 тыс. Уведомлений в день в самом начале и смогу значительно увеличить это число при развертывании в производство.
После реализации описанного выше сценария я столкнулся с некоторой проблемой ограничений.
Служба разработана на C#.Net
и Apache.NMS
, а ActiveMQ установлен на Windows Server машине.
У меня не было времени оптимизировать мой код, и я создаю новое соединение / сеанс / продюсер для каждого отправляемого уведомления (так как пока нет поддержки в C # для pooledconnectionfactory
). Но это не проблема, так как на данный момент меня не волнует такая производительность.
Проблема у меня заключается в том, что при выполнении моих функциональных тестов кажется, что я не могу отправлять сообщения в activemq, когда он достигает около 20 тыс. Сообщений. Это просто зависает и приводит к таймауту для моей транзакции (40 секунд). Это решается, когда я удаляю сообщения всех тем на http://localhost:8161/admin/topics.jsp странице администратора.
Не могли бы вы указать мне правильную конфигурацию actviemq, которую я должен использовать для моего случая?
В чем может быть причина проблемы, с которой я сталкиваюсь?
Также приветствуются любые общие предложения!