Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

125
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda