Обмен сообщениями с низкой задержкой WebSphere MQ — есть ли у него API JMS (или подобный JMS)?

В настоящее время мы используем IBM MQ через JMS, но, похоже, проталкиваем больше сообщений, чем может обработать - как ни странно, проблема кажется прерывистой.

Сообщения представляют собой цены, поэтому их не нужно гарантировать, их просто нужно отправить быстро.

Поскольку у IBM есть продукт с малой задержкой, мне интересно, это, пожалуй, лучшее решение, но, похоже, у него нет API-интерфейса JMS или, по крайней мере, его трудно увидеть.

Кто-нибудь знает, есть ли JMS API в продукте с низкой задержкой, или если у него есть «уникальный» API, похожий на JMS...

В качестве альтернативы, указатели для настройки MQ также будут оценены... :)


person Chris Kimpton    schedule 09.10.2009    source источник


Ответы (3)


Определенно продукт для обмена сообщениями с малой задержкой лучше подойдет для вашей проблемы. Я работаю над проектом, в котором мы делаем что-то очень похожее, используя продукт для обмена сообщениями с малой задержкой под названием LBM от 29West. У него нет API-интерфейса JMS, и я подозреваю, что его не будет у большинства продуктов с низкой задержкой. Существует большое количество функций, которые не имеют смысла в сочетании с этими типами продуктов (например, постоянство, селекторы и т. д.). Мы обнаружили, что написание нашего собственного простого API поверх продукта для обмена сообщениями довольно просто и дает нам гибкость для изменения продуктов позже и освобождает нас от части громоздкости и многословия API JMS.

Другой вариант, который стоит рассмотреть, это JGroups.

Компания 29West добавила поддержку JMS в свою линейку продуктов для обмена сообщениями.

person Michael Barker    schedule 10.10.2009
comment
Спасибо - у нас обычно нет чрезмерных объемов или жестких требований к задержке, и наше предыдущее решение, Fiorano, работало нормально. К сожалению, стандарты компании диктуют IBM MQ :( - person Chris Kimpton; 11.10.2009

Что касается «указателей для настройки MQ», на странице SupportPacs. существуют оценки производительности для каждой платформы с конкретными рекомендациями. Прокрутите вниз до пакетов SupportPac с именем MP* и найдите соответствующую версию и платформу. Тестируются различные сценарии с большими и маленькими сообщениями, постоянными и непостоянными, вариациями количества геттеров и путтеров и т. д.

person T.Rob    schedule 13.06.2010

Как бывший разработчик продукта LLM я могу сказать, что это так или по крайней мере было. Ниже приведен отрывок, который я взял из общедоступного информационного центра для версии 2.6.

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

У LLM принципиально другая цель; он имеет надежную доставку: то есть, если он не доставляется, вы просто узнаете, что он не доставил. Восстанавливаемость этих сообщений ограничена только тем, сколько вы хотите сохранить в кэше или отозвать с диска и, следовательно, как долго вы готовы терпеть ожидание восстановления, задерживая свой процесс. В вашем случае вы можете не заботиться о восстановлении. Подходит ли вам LLM или нет, я не могу предположить. Что я могу сказать, так это то, что с моей точки зрения как бывшего разработчика, а затем как клиента, я не нашел между ними практически никакого сходства, а производительность LLM для такого рода приложений полностью выбила MQ из воды. Я также никогда особо не использовал сторону java/jms и был сосредоточен на C/C++, так что отнеситесь к этому с недоверием. Я просто знал, что он это сделал и где искать в гугле.

http://www-01.ibm.com/support/knowledgecenter/SSQPD3_2.6.0/com.ibm.wllm.doc/api/javadoc/messaging/com/ibm/llm/jms/package-summary.html

Пакет com.ibm.llm.jms Описание

Реализуйте общедоступные классы поставщика для клиента LLM JMS.

Большинство интерфейсов, используемых в JMS, определяются стандартными интерфейсами JMS. Однако спецификация JMS не включает классы и интерфейсы, необходимые для настройки клиента JMS.

См. документацию JMS API для получения информации о классах и методах JMS.

Введение

Клиент LLM JMS предоставляет интерфейс службы сообщений Java (JMS) для LLM. Использование интерфейса JMS для LLM обеспечивает общий интерфейс с другими провайдерами обмена сообщениями и ускоряет разработку приложений, позволяя разработчикам использовать знакомые им интерфейсы. Использование интерфейса JMS лучше всего подходит для приложений, которые используют общую функцию обмена сообщениями, где настройки можно администрировать централизованно. Сюда входят многие традиционные клиентские приложения. Клиент LLM JMS также не работает, если приложение зависит от конкретных функций LLM или требует значительного взаимодействия приложения с LLM. Несмотря на то, что при использовании интерфейса JMS добавляется некоторая задержка, он по-прежнему обеспечивает очень низкую задержку и высокую пропускную способность обмена сообщениями.

Клиент LLM JMS поддерживает большинство клиентских функций LLM, но не поддерживает серверную функцию работы на уровне или в качестве передатчика балансировки нагрузки.

LLM основан на прямом обмене сообщениями между производителем и потребителем. JMS обычно реализуется с использованием сервера сообщений, а функция JMS, для которой требуется сервер сообщений, недоступна при использовании клиента LLM JMS. Это включает в себя все двухточечные сообщения (очереди), а также функцию восстановления. Клиент LLM JMS предназначен для работы в среде JSE и не поддерживает расширения сервера приложений или транзакции XA.

Как клиент LLM JMS реализует JMS

Клиент LLM JMS реализует каждый из основных объектов JMS с классом реализации, который не предоставляется извне. Подклассы этих объектов реализованы с использованием одного и того же класса реализации. Это означает, что есть только два администрируемых объекта, ConnectionFactory и Destination. Определенная LLM ConnectionFactory может быть приведена к TopicConnectionFactory и QueueConnectionFactory, а определенная LLM Destination может быть приведена к Topic и Queue. То же самое верно для Connection, Session, MessageProducer и MessageConsumer. Объект Destination от одного провайдера должен использоваться с Connection от того же провайдера. Однако можно отправить сообщение, созданное одним поставщиком JMS, другому поставщику JMS. Отправка сообщения, созданного другим провайдером JMS, не так эффективна, как отправка сообщения, созданного клиентом LLM JMS, но эта функция предназначена для того, чтобы упростить приложению переход от одного провайдера к другому.

Клиент LLM JMS не реализует двухточечную модель обмена сообщениями (очереди), но можно создавать все объекты JMS.

Для клиента LLM JMS требуется JVM не ниже Java 5.

Клиент LLM JMS определяет все шесть объектов типов сообщений (Message, BytesMessage, MapMessage, ObjectMessage, StreamMessage и TextMessage). При отправке сообщения из JMS в JMS заголовок JMS указывает тип сообщения. Если заголовок JMS отсутствует (что часто случается при отправке сообщения от производителя, отличного от JMS), клиент LLM JMS пытается вывести тип сообщения из содержимого. Обычно сообщение отображается как BytesMessage, но если сообщение начинается с спецификации UTF-8 или выглядит как XML, оно будет интерпретироваться как TextMessage. Предполагается, что текстовые сообщения закодированы в UTF-8......

person UpAndAdam    schedule 16.09.2015