Очереди брокера сообщений и тип сообщения - PullRequest
2 голосов
/ 19 мая 2010

Какова стандартная мудрость и соображения для разделения очереди сообщений?

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

Несколько возможных соображений, о которых я могу подумать:

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

Ответы [ 2 ]

1 голос
/ 20 сентября 2012

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

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

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

1 голос
/ 11 октября 2010

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

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

...