2009-10-09 18 views
5

Actualmente estamos utilizando IBM MQ a través de JMS, pero parece que estamos enviando más mensajes de los que puede manejar; extrañamente, el problema parece ser intermitente.Mensajería de baja latencia de WebSphere MQ: ¿Tiene una API JMS (o JMS)?

Los mensajes son precios y, por lo tanto, no es necesario garantizarlos, solo deben enviarse rápidamente.

Como IBM tiene un Low Latency product, me pregunto si esa es quizás la mejor solución, pero no parece tener una API JMS, o al menos no es fácilmente visible.

Alguien sabe si hay una API de JMS en el producto de baja latencia, o si la API "único" que sí tiene es JMS-como ...

Alternativamente, los punteros para el ajuste de MQ también sería apreciada. .. :)

Respuesta

5

Sin duda, un producto de mensajería de baja latencia sería más adecuado a su problema, estoy trabajando en un proyecto en el que hacemos algo muy similar usando un producto de mensajería de baja latencia llamada de LBM 29West. No tiene una API de JMS y sospecho que la mayoría de los productos en el espacio de baja latencia no lo hará. Existe una gran cantidad de características que no tienen sentido en combinación con estos tipos de productos (por ejemplo, persistencia, selectores, etc.). Descubrimos que escribir nuestra propia API sencilla en la parte superior del producto de mensajería es bastante fácil y le da la flexibilidad de cambiar los productos más adelante y nos libera de la mayor parte de la API de JMS.

Otra opción a considerar sería JGroups.

29West han agregado soporte JMS a su línea de productos de mensajería.

+0

Gracias - no tenemos generalmente volúmenes excesivos o requisitos de latencia ajustados y nuestra solución anterior, Fiorano, funcionó bien. Lamentablemente, los estándares de la compañía dictan IBM MQ :( –

1

En cuanto a "punteros para el ajuste de MQ", en la SupportPacs page hay evaluaciones de desempeño por plataforma con recomendaciones específicas. Desplácese hasta SupportPacs llamado MP * y busque la versión y plataforma adecuadas. Se prueban una variedad de escenarios con mensajes grandes y pequeños, persistentes y no persistentes, variaciones en los números de getter y putters, etc.

1

Como antiguo desarrollador del producto LLM, puedo decir que lo hace o al menos lo hizo . Vea a continuación un extracto que tomé del infocenter disponible públicamente para la versión 2.6

Dicho esto, por lo que recuerdo, el objetivo de MQ era entrega garantizada. Hay un tiempo y un lugar para esto, pero tiene un costo en términos de latencia y ancho de banda.

LLM tiene un propósito diferente fundamentalmente; tiene entrega confiable: si no se entrega, simplemente sabrá que no se entregó. La capacidad de recuperación de estos mensajes solo está limitada por la cantidad que esté dispuesto a guardar en caché o memoria desde el disco y, por lo tanto, cuánto tiempo estará dispuesto a tolerar la recuperación mientras mantiene el proceso. En su caso, es posible que no desee recuperarlo. Si LLM es adecuado para usted o no, no puedo especular. Lo que puedo decir es que, desde mi punto de vista como desarrollador anterior y más tarde como cliente, encontré poco o ningún parecido entre los dos, y el rendimiento de LLM para este tipo de aplicación sacó completamente a MQ del agua. Tampoco utilicé mucho el lado java/jms y me centré en C/C++, así que tómenlo con un grano de sal. Solo sabía que lo hizo y dónde buscar en google.

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 paquete.jms Descripción

Implemente las clases públicas específicas del proveedor para el cliente LLM JMS.

La mayoría de las interfaces utilizadas en JMS están definidas por las interfaces comunes JMS . Sin embargo, la especificación JMS no incluye las clases e interfaces necesarias para configurar el cliente JMS.

Consulte la documentación de la API JMS para obtener información sobre las clases JMS y los métodos.

Introducción

El cliente LLM JMS proporciona una interfaz Java Message Service (JMS) a LLM. El uso de la interfaz JMS para LLM permite una interfaz común con otros proveedores de mensajería, y acelera el desarrollo de aplicaciones por permitiendo a los desarrolladores utilizar interfaces con las que están familiarizados. Con , la interfaz JMS funciona mejor para las aplicaciones que utilizan la función de mensajería genérica , donde las configuraciones se pueden administrar centralmente. Esto incluye muchas aplicaciones de cliente tradicionales. El cliente LLM JMS no funciona tan bien donde la aplicación depende de LLM funciones específicas o que requieren una interacción significativa interacción con LLM. Si bien se ha agregado cierta latencia mediante el uso de la interfaz JMS , todavía proporciona una latencia muy baja y un alto rendimiento de mensajes.

El cliente LLM JMS soporta la mayoría de la función de cliente LLM, pero no lo hace soporte la función de servidor de correr dentro un esquema, o ser un transmisor de equilibrio de carga .

LLM se basa en enviar mensajes directos de productor a consumidor. JMS es normalmente implementado utilizando un servidor de mensajes y función JMS que requiere que el servidor de mensajes no esté disponible cuando se utiliza el cliente LLM JMS . Esto incluye todos los mensajes punto a punto (colas), así como una función de recuperación . El cliente LLM JMS está diseñado para ejecutarse en un entorno JSE y no es compatible con las extensiones del servidor de aplicaciones ni con las transacciones XA .

Cómo implementa el cliente LLM JMS JMS

El cliente LLM JMS implementa cada uno de los objetos JMS fundamentales con una clase de implementación que no está expuesta externamente. Las subclases de estos objetos se implementan usando la misma clase de implementación . Esto significa que solo hay dos objetos administrados, ConnectionFactory y Destination. Un LLM definido ConnectionFactory se puede convertir en TopicConnectionFactory y QueueConnectionFactory, y un LLM definido Destination se puede convertir a Topic and Queue. Lo mismo es cierto para Connection, Session, MessageProducer y MessageConsumer. El objeto Destino de un proveedor debe ser utilizado con una Conexión por el mismo proveedor. Sin embargo, es posible enviar un mensaje producido por un proveedor JMS a otro proveedor JMS. Enviar un mensaje creado por otro proveedor JMS no es tan eficiente como enviar un mensaje creado por el cliente JMS LLM , pero esta función se proporciona para que sea más fácil para una aplicación pasar de un proveedor a otro.

El cliente LLM JMS no implementa el modelo de mensajería punto a punto (colas), pero se pueden crear todos los objetos JMS.

El cliente LLM JMS requiere una JVM de al menos Java 5.

El cliente LLM JMS define todos los objetos de tipo de seis mensaje (mensaje, BytesMessage, MapMessage, ObjectMessage, StreamMessage, y TextMessage). Al enviar un mensaje de JMS a JMS, el encabezado JMS indica el tipo de mensaje. Si falta el encabezado JMS (que es común al enviar un mensaje de un productor que no es JMS), el cliente LLM JMS intenta deducir el tipo de mensaje del contenido. Normalmente, el mensaje aparecerá como BytesMessage, pero si el mensaje comienza con una BOM UTF-8 o parece ser XML, se interpretará como a TextMessage. Se supone que TextMessages están codificados en UTF-8 ......