tutorial students microsoft management for control azureweb azure azureservicebus

students - microsoft management azure



¿Cómo identifica Azure Service Bus un mensaje duplicado? (3)

En mi caso, tengo que aplicar ScheduledEnqueueTimeUtc sobre MessageId . Debido a que la mayoría de las veces el primer mensaje ya fue recogido por el trabajador, antes de que el mensaje duplicado de la subsecuencia llegara a la cola. Añadiendo ScheduledEnqueueTimeUtc . Le decimos al Bus de servicio que retenga el mensaje por un tiempo antes de dejar que el trabajador los suba.

var message = new BrokeredMessage(json) { MessageId = GetMessageId(input, extra) }; // Delay 30 seconds for Message to process // So that Duplication Detection Engine has enought time to reject duplicated message message.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddSeconds(30);

Entiendo que Azure Service Bus tiene una función de detección de mensajes duplicados que eliminará los mensajes que crea que son duplicados de otros mensajes. Me gustaría usar esta función para ayudar a proteger contra alguna entrega duplicada.

Lo que me interesa es cómo el servicio determina que dos mensajes son en realidad duplicados:

  • ¿Qué propiedades del mensaje son consideradas?
  • ¿Se considera el contenido del mensaje?
  • Si envío dos mensajes con el mismo contenido, pero con propiedades de mensaje diferentes, ¿se consideran duplicados?

Otra propiedad importante que debe considerarse al tratar con la propiedad '' RequiereDuplicaciónDetección '' de una entidad del Bus de servicio de Azure es '' DuplicateDetectionHistoryTimeWindow '', el marco de tiempo dentro del cual se rechazará el mensaje con id de mensaje duplicado.

El valor predeterminado del historial de detección de duplicados ahora es de 30 segundos, el valor puede oscilar entre 20 segundos y 7 días.

La habilitación de la detección de duplicados ayuda a realizar un seguimiento del MessageId controlado por la aplicación de todos los mensajes enviados a una cola o tema durante una ventana de tiempo específica. Si se envía un mensaje nuevo con un Id. De mensaje que ya se ha registrado durante la ventana de tiempo, el mensaje se notifica como aceptado (la operación de envío es exitosa), pero el mensaje recién enviado se ignora y elimina instantáneamente. No se consideran otras partes del mensaje que no sea el MessageId.


La detección de duplicados está mirando la propiedad MessageId del mensaje intermediario. Por lo tanto, si configura el Id. Del mensaje en algo que debería ser único por mensaje que llega en la detección de duplicados, puede capturarlo. Por lo que sé, solo el ID de mensaje se utiliza para la detección. El contenido del mensaje NO se analiza, por lo tanto, si tiene dos mensajes enviados que tienen el mismo contenido real, pero tienen identificaciones de mensajes diferentes, no se detectarán como duplicados.

Referencias:

Documentación de MSDN: http://msdn.microsoft.com/en-us/library/windowsazure/hh367516.aspx

Si el escenario no puede tolerar el procesamiento duplicado, entonces se requiere lógica adicional en la aplicación para detectar duplicados que se pueden lograr en base a la propiedad MessageId del mensaje que permanecerá constante durante los intentos de entrega. Esto se conoce como exactamente una vez que se procesa.

También hay un ejemplo de código de Detección de duplicación de mensajes intermedios en WindowsAzure.com que debería ser exactamente lo que está buscando en la medida en que lo demuestre.

También probé rápidamente esto y envié 5 mensajes a una cola con el conjunto de RequiresDuplicateDetection requisitos RequiresDuplicateDetection como verdadero, todos con el mismo contenido exacto pero diferentes MessageIds . De MessageIds . Luego recuperé los cinco mensajes. Luego hice lo contrario, donde tuve coincidencias de MessageIds pero diferentes cargas útiles, y solo se recuperó un mensaje.