Problema del modo de cola backend activemq con múltiples consumidores
Recientemente utilizamos activemq para entregar mensajes de forma asincrónica en un proyecto. Cuando solo había un consumidor, el sistema funcionaba normalmente, pero cuando se agregaban varios consumidores, solo uno de ellos consumía y los demás no. No consumir.
Razón
activemq tiene un mecanismo llamado lectura previa de mensajes. De forma predeterminada, leerá 1000 mensajes y los enviará a un consumidor. Cuando los mensajes acumulen más de 1000, lo hará. continúe leyendo los mensajes restantes y enviándolos a otro consumidor. Este mecanismo puede ser eficaz cuando hay un solo consumidor, pero es inapropiado cuando hay varios consumidores y puede provocar que otros consumidores queden inactivos.
Solución
En la conexión del cliente, empalmar jms.prefetchPolicy.all=xxx le permitirá ajustar el número de entradas de captación previa de mensajes cuando haya varios consumidores. Este parámetro puede ser apropiado. Se reduce para garantizar que otros consumidores también puedan consumirse, aumentando así la velocidad de consumo.
Ejemplo de conexión completa (en Spring Boot):
1
spring.activemq.broker-url=tcp://localhost:61616?jms prefetchPolicy. .todos=2