Compartir por


Eliminación de mensajes por lotes en Azure Service Bus (versión preliminar)

Azure Service Bus es un agente de mensajes de integración empresarial totalmente administrado que permite enviar y recibir mensajes entre aplicaciones y servicios desacoplados. Sin embargo, a veces es posible que quiera eliminar mensajes de una cola o suscripción sin procesarlos, por ejemplo, si han expirado, están dañados o no son irrelevantes. En este artículo se muestra cómo eliminar mensajes en lotes en Azure Service Bus.

Escenarios para la eliminación por lotes de mensajes

Hay varios escenarios en los que es posible que quiera usar la característica de eliminación por lotes de mensajes en Azure Service Bus. Algunas de ellas son:

  • Mensajes expirados: elimine mensajes que superen su valor de período de vida (TTL) y estén en la cola de mensajes fallidos.
  • Validación o procesamiento con errores: quite los mensajes que no se pudieron validar o procesar y se encuentran en la cola de mensajes fallidos.
  • Mensajes irrelevantes: elimine los mensajes ya no relevantes para la lógica de la aplicación de la cola activa.
  • Control de duplicados o contenido incorrecto: quite mensajes duplicados o incorrectos de la cola activa.

Mediante la característica de eliminación por lotes de mensajes, puede eliminar varios mensajes de una cola o suscripción en una operación, en lugar de eliminarlos uno por uno. Dado que la eliminación se realiza en el lado del servicio, no es necesario recibir los mensajes antes de eliminarlos. Este método minimiza tanto el número de solicitudes de servicio como la latencia de red.

Importante

Actualmente, la eliminación por lotes no es compatible con entidades particionadas. Puede eliminar un máximo de 4000 mensajes en una llamada de eliminación por lotes. La eliminación por lotes se realiza con el mejor esfuerzo y no garantiza que el messageCount exacto se elimine en una sola llamada API.

Cómo eliminar mensajes por lotes en Service Bus

Puede eliminar mensajes llamando a DeleteMessagesAsync en el objeto Service Bus Receiver. En el lado servidor, DeleteMessagesAsync requiere dos parámetros: messageCount y beforeEnqueueTime.

  • messageCount: el número deseado de mensajes que se van a eliminar. El servicio puede eliminar menos mensajes que este límite.
  • beforeEnqueueTime: un valor DateTimeOffset opcional, en UTC, que representa la hora límite para su eliminación. Solo se borrarán los mensajes que se hayan puesto en cola antes de esa hora.

Además, puede llamar a PurgeMessagesAsync para purgar todos los mensajes de la entidad.

Al usar los SDK de Azure para realizar estas operaciones, el parámetro beforeEnqueueTime tiene como valor predeterminado la hora UTC actual (DateTime.UtcNow()). Es importante asegurarse de proporcionar los valores correctos para evitar la eliminación de mensajes no deseados.

Nota:

La operación de purga podría dar lugar a un aumento del uso de la CPU, ya que implica varias llamadas API. Durante la purga, los mensajes bloqueados no son aptos para la eliminación y permanecerán en la entidad.

Pasos siguientes

Para explorar las características de Azure Service Bus, pruebe los ejemplos en el idioma que prefiera:

Muestras para las bibliotecas cliente .NET y Java más anteriores:

El 30 de septiembre de 2026, retiraremos las bibliotecas del SDK de Azure Service Bus WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus y com.microsoft.azure.servicebus, que no se ajustan a las directrices del SDK de Azure. También retiraremos el soporte del protocolo SBMP, por lo que ya no podrás usar este protocolo después del 30 de septiembre de 2026. Migre a las bibliotecas más recientes del SDK de Azure, que ofrecen actualizaciones de seguridad críticas y funcionalidades mejoradas, antes de esa fecha.

Aunque las bibliotecas anteriores todavía se pueden usar después del 30 de septiembre de 2026, ya no recibirán soporte técnico oficial ni actualizaciones de Microsoft. Para obtener más información, consulte el anuncio de retirada de soporte técnico.