Pregunta

Estábamos buscando en MSMQ la comunicación persistente del servidor "push" al cliente. Puede haber hasta 1000 clientes por servidor.

En una de nuestras pruebas, enviamos un pequeño mensaje a 300 clientes fuera de línea y luego enviamos un mensaje a un cliente en línea. El último mensaje se retrasó más de 40 minutos a medida que MSMQ se abrió paso a través de los mensajes que no se podían entregar (observados a través de MMC). También utilizamos MSMQ para la ruta de retorno donde funciona bien.

¿Hay alguna forma de hacer que MSMQ se ajuste a este patrón de uso reduciendo la cantidad de tiempo que intenta conectarse a un host fuera de línea? Si no es así, ¿hay algún otro producto de cola que encajaría mejor o es su propio tiempo? El rendimiento sin procesar no es una prioridad, pero el número de colas salientes y la previsibilidad / latencia máxima lo son, al igual que la huella de memoria en los clientes (que pueden ser máquinas bastante viejas).

¿Fue útil?

Solución 2

Nuestra solución fue pausar mediante programación las colas a máquinas que estaban fuera de línea (ya teníamos un mensaje UDP para saber si los clientes estaban activos) a través de una de las interfaces COM de administración de MSMQ.

Con las colas a hosts desconectados conocidos en pausa, MSMQ pasó mucho menos tiempo trabajando a través de mensajes que no se pueden entregar.

¡También fue una buena lección aplicar un poco de pensamiento lateral al pensar en pruebas para evaluar tecnologías! En general, no recomendaría MSMQ para las comunicaciones de servidor a cliente debido a este problema; diría que sería preferible sondear los clientes.

Otros consejos

Puede aumentar el rendimiento deshabilitando el registro en diario y haciendo que los mensajes no sean recuperables ... si no le importa que los mensajes se pierdan.

Una solución rápida con su escenario fuera de línea podría ser aumentar el número de subprocesos disponibles para MSMQ que usa un subproceso por cola saliente. Cada intento de conexión fuera de línea lleva un tiempo, bloqueando un hilo. http://technet.microsoft.com/en-us/library/cc957498.aspx Intenta lanzar tantos hilos como puedas.

Mis compañeros han trabajado con ActiveMQ y han dicho que es mucho más flexible mientras se desempeña mejor. No he trabajado personalmente con él, pero lo investigaría si no estás vinculado a .Net.

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