Одна очередь JMS с несколькими потребителями

У меня есть приложение Oracle Commerce, которое потребляет сообщения через одну очередь JMS. У меня есть десять потребителей с одной очередью назначения. Я хотел бы понять плюсы и минусы этой архитектуры и как ее оптимизировать.

2 ответа

Когда потребители разделяют рабочую нагрузку, обычно они делят очередь. в противном случае может быть лучше создать отдельную очередь для каждого потребителя.

Если вы хотите транслировать сообщения, размещающие сообщение в виде подсказки, то есть возможность создать мост для каждого потребителя.

под этим я подразумеваю мост от топика до очереди потребителя. Преимущество использования моста состоит в том, что сообщения будут оставаться в очереди (как долго, так и время действия сообщения не истечет), когда пользовательский процесс не работает в течение короткого периода времени.

Я просто хочу сказать, что этот вопрос не имеет никакого отношения к Oracle Commerce и касается общих принципов реализации очередей.

Если у вас одна очередь и много потребителей, помните, что все они будут пытаться обрабатывать сообщения одновременно. Это может быть нежелательно в некоторых ситуациях, если важен порядок обработки сообщений или существуют зависимые сообщения, которые необходимо обработать перед обработкой текущего сообщения. Даже при этом существуют шаблоны, которые могут помещать сообщения обратно в очередь для последующей обработки, чтобы добиться зависимой обработки сообщений.

Обработка исключений - еще одна сложная тема, когда у вас несколько потребителей. Убедитесь, что вся обработка сообщений имеет хорошую обработку исключений, и отправляет сообщение обратно в очередь (путем выдачи исключений) для последующей обработки. Кроме того, если есть сообщение, которое может застрять при обработке, поскольку оно будет генерироваться каждый раз, когда вы захотите поместить их в другую очередь, после стольких исключений. В свое время мы создали среду обработки исключений, которая помогла во всех этих сценариях.

Если вы действительно хотите просто передать сообщение многим потребителям по теме, используйте архитектуру pub-sub, и с этим гораздо проще справиться.

Опять же, как и в другом комментарии, сценарий того, что вы пытаетесь сделать, поможет обеспечить правильное направление.

Вот обсуждение, которое могло бы дополнительно помочь с вашим вопросом - http://c2.com/cgi/wiki?MessageQueuingArchitectures

Другие вопросы по тегам