Очереди брокера сообщений и тип сообщения

Каковы стандартные мудрые решения и рекомендации по разделению очереди сообщений?

Предполагая относительно небольшое количество сообщений (<1000 в день), имеет ли смысл объединять несколько типов сообщений в одну очередь и заставлять потребителей использовать селекторы для их фильтрации? Или одна очередь должна обрабатывать только один тип сообщения?

Я могу подумать о паре возможных соображений:

  • По крайней мере, с учетом моих ограниченных знаний об ActiveMQ, похоже, что безопасность чтения / записи зависит от очереди. Таким образом, для типов сообщений, которым требуются разные разрешения на чтение и запись, потребуются разные очереди.
  • Селекторам сообщений может потребоваться стандартное значение заголовка (MessageType: AbcMessage) для фильтрации
  • Взрыв очередей (> 10,> 100,> 1000?), Похоже, влияет на производительность больше, чем рост количества сообщений.
  • Казалось бы, проще написать клиентский код для одного типа сообщения в очереди. Просто обработайте каждое сообщение в очереди. Если вам нужен другой тип сообщения, подпишитесь на другую очередь.
  • ???

person Mark Brackett    schedule 18.05.2010    source источник


Ответы (2)


Любая заданная система MQ должна быть способна обрабатывать многие миллионы сообщений в любой заданной очереди, я бы вообще не беспокоился об этом.

Я предпочитаю очереди, которые имеют четкое реальное значение, а не беспокоиться о селекторах. Я знаю, что есть реальные причины использовать селекторы или использовать и повторно ставить в очередь, но я предпочитаю делать очереди отдельными и не беспокоиться о выборе.

person Jé Queue    schedule 11.10.2010

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

Если вы посмотрите здесь, вы найдете определяемый пользователем свойство доступно для всех сообщений с именем JMSType. Это String и по умолчанию пусто. Когда вы отправляете сообщения, пусть ваш производитель установит для него согласованное значение, такое как, например, map или text, а затем в вашем потребителе используйте конкретный селектор сообщений в зависимости от того, какое сообщение вы хотите получить. Используя те же примеры, это будет JMSType = 'map' или JMSType = 'text'.

Я смог успешно использовать эту технику с производителем Java и потребителем C ++, используя ActiveMQ -CPP библиотеки.

person Joe Bane    schedule 20.09.2012