Pregunta

Nuestra conectividad al código EMS fue inicialmente mal diseñado y creado por un objeto TopicConnection tema que hemos escuchado. Así que, en efecto, cada vez que nos suscribimos a un tema, creamos una nueva conexión, una nueva sesión y, por último, una nueva escucha.

Nos gustaría cambiar a un modelo único de conexión. A pesar de que soy capaz de hacer esto fácilmente en nuestro código compartiendo un objeto de conexión y la creación de un nuevo objeto de sesión por cada tema, no estamos seguros de si esto va a causar ningún problema y sin código.

Mi entendimiento es que la biblioteca cliente Tibco EMS es seguro para subprocesos con respecto a compartir una conexión. En efecto, una conexión es sólo un tubo y las sesiones pueden resuse el este tubo de una manera segura hilo.

¿Es esta suposición correcta o hay algo más que esto?

¿Fue útil?

Solución

La API .NET SGA se basa en JMS . En JMS, los objetos de conexión y de sesión se especifican para ser flujos seguros y pueden ser reutilizados dentro del programa. Tiene usted toda la razón en que el objeto Connection representa simplemente una tubería de red al servidor EMS. La Guía del usuario ccsme estados:

Una conexión es un objeto bastante pesado, por lo que la mayoría de los clientes van a crear una conexión de una vez y mantenerlo abierto hasta que la salida de clientes. Su aplicación puede crear múltiples conexiones, si es necesario.

Y con respecto a las sesiones:

Una sesión es un contexto de un solo subproceso para la producción o el consumo de mensajes. Se crea Mensaje productores o consumidores de mensajes utilizando objetos de sesión.

En esencia, a menos que necesite volúmenes muy grandes y están toparse con limitaciones de rendimiento, es perfectamente seguro de usar sólo una conexión en su aplicación. Los parámetros de la sesión la semántica de transacciones / reconocimiento de cualesquiera productores o consumidores creados dentro, pero es más seguro para volver a utilizar. Probablemente me volvería a usar sesiones separadas para los módulos existen dentro de la aplicación, con ciclos de vida distintos (pensar unidades de despliegue independientes dentro de un servidor de aplicaciones).

Su instalación del servidor EMS contener un directorio de muestras con distintos códigos (algo así como C: \ TIBCO \ ems \ 5.0 \ samples \ cs ). El código en csTopicSubscriber.cs muestra cómo escribir un solo subproceso tema del consumidor. No hay ningún ejemplo el tema de consumo de múltiples hebras, pero csMsgConsumerPerf.cs muestra cómo hacerlo con colas.

Asegúrese de limpiar los objetos que se crean después de que haya terminado con ellos - por ejemplo, cerrar el objeto tema del consumidor, la sesión, y la conexión cuando haya terminado. Fuga de mangos sin cerrar ellos puede resultar en un comportamiento impredecible cuando se combina con la captura previa y la configuración de reconexión tolerantes a fallos.

Otros consejos

creo que sí, siempre y cuando el intercambio se encuentra dentro de la misma aplicación (exe, binario). Hemos compartido mismo objeto de conexión, y lo usó como un producto único en nuestro código.

De acuerdo con una respuesta anterior: la Sesión JMS no debe ser compartido entre hilos, pero la conexión puede / debe ser. Así que una conexión por aplicación está bien (asegúrese de empezar / cerrar sólo una vez - mejor antes / después de la creación de roscas individuales).

Y a continuación, crear y utilizar una sesión por hilo. Recuerde que cuando se cierra () una sesión, se bloqueará hasta que todos reciben devoluciones de llamada realmente han regresado. Así que no llame a close () desde dentro onMessage de una devolución de llamada ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top