Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

123
Vistas
Cómo leer mensajes retenidos para un tema

Tengo una aplicación web que publica mensajes en un tema y luego varios servicios de Windows que se suscriben a esos temas, algunos con varias instancias. Si los servicios se están ejecutando cuando se publican los mensajes, todo funciona correctamente, pero si no es así, los mensajes se retienen en las colas que se suscriben a ese tema, pero no se leen cuando los servicios se reinician.

El comportamiento deseado-

  1. Cuando se publica un mensaje en la cadena de tema MyTopic, se lee desde MyTopicQueue solo una vez. Utilizo algunos temas comodín para que cada mensaje se envíe a varias colas, pero varias instancias de un servicio se suscriben a la misma cadena de tema y cada mensaje debe ser leído solo por esas instancias.

  2. Si los suscriptores del tema MyTopic no están en línea cuando se publica el mensaje, los mensajes se conservan en MyTopicQueue.

  3. Cuando los servicios de Windows que se suscriben a un tema particular vuelven a estar en línea, cada mensaje retenido es leído desde MyTopicQueue por un solo suscriptor.

Encontré alguna documentación irregular [normalmente para IBM] sobre las opciones MQSUBRQ y MQSO_PUBLICATIONS_ON_REQUEST, pero no estoy seguro de cómo debo configurarlas. ¿Puede alguien ayudarme a averiguar qué debo hacer para obtener el comportamiento deseado? [Aparte de volver a cambiar a RabbitMQ, lo cual no puedo hacer, aunque lo preferiría.]

Mis opciones:

 private readonly int _openOptions = MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING | MQC.MQSO_MANAGED; private readonly MQGetMessageOptions _messageOptions = new MQGetMessageOptions()

Código para abrir el Tema:

 _topic = _queueManager.AccessTopic(_settings.TopicString, null, MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, _openOptions);

La línea de código que lee del tema (tomado de un bucle):

 _topic.Get(mqMessage, _messageOptions);
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si desea que los mensajes se acumulen mientras no está conectado, debe hacer que la suscripción sea duradera agregando MQC.MQSO_DURABLE . Para poder reanudar una suscripción existente, agregue MQC.MQSO_RESUME además de MQC.MQSO_CREATE .


Tenga cuidado con la terminología, lo que describe como mensajes retenidos es una suscripción duradera.

Las publicaciones retenidas son otra cosa en la que MQ puede retener un mensaje publicado más recientemente sobre cada tema y este mensaje será recuperado por los nuevos suscriptores de forma predeterminada a menos que usen MQSO_NEW_PUBLICATIONS_ONLY para omitir la recepción de la publicación retenida.

MQSO_PUBLICATIONS_ON_REQUEST permite que un suscriptor solo reciba publicaciones retenidas a pedido, no recibirá publicaciones no retenidas.


Si desea que varios consumidores trabajen juntos en una sola suscripción, tiene dos opciones:

  1. Mire los suscriptores compartidos en XMS.NET, mire la propiedad CLONESUPP .
  2. Cree una suscripción duradera única a una cola sobre los temas que desea consumir, luego haga que sus consumidores consuman directamente de la cola, no de un tema.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda