2012-06-21 21 views
6

Soy nuevo en RabbitMQ y me preguntaba sobre un buen enfoque para este problema que estoy reflexionando. Quiero crear un servicio que se suscriba a una cola y solo atraiga mensajes que cumplan con un criterio específico; por ejemplo, si hay un encabezado de asunto específico en el mensaje.RabbitMQ-- recuperación selectiva de mensajes de una cola

Todavía estoy aprendiendo sobre RabbitMQ, y estaba buscando consejos sobre cómo abordar esto. Mis preguntas incluyen: ¿cómo puede el consumidor extraer solo mensajes específicos de la cola? ¿Cómo puede el productor establecer un encabezado de asunto en el mensaje (si ese es el término correcto?)

+0

Si realmente su consumidor tiene que suscribirse ** ** (no está interesado en los mensajes que se publican _antes_ la suscripción), la suscripción (y vinculante con regla de selección) no es una _queue_ existente sino un _exchange_ existente (como se responde a continuación). Luego, la redacción de la pregunta debe ser editada. – Myobis

Respuesta

14

RabbitMQ es perfecto para esta situación. Tienes varias opciones para hacer lo que quieres. Sugiero leer la documentación para obtener una mejor comprensión. Sugeriría que uses un tema o un intercambio directo. El tema es más flexible. Dice así.

El código del productor se conecta al RabbitMQ Broker y crea e intercambia con un nombre específico.

El productor publica en el intercambio. Cada mensaje publicado se publicará con una clave de enrutamiento.

El consumidor se conecta al intermediario RabbitMQ.

Consumidor crea cola

Consumidor se une a la cola de la bolsa, el mismo cambio definido en el productor. El enlace también incluye las claves de enrutamiento para cada mensaje requerido para este consumidor en particular.

Digamos que estaba publicando mensajes de registro. La clave de enrutamiento puede ser algo como "log.info", "log.warn", "log.error". Cada mensaje publicado por el productor tendrá adjunta la clave de enrutamiento correspondiente. Luego tendrá un consumidor que envía y envía por correo electrónico todos los mensajes de error y otro que escribe todos los mensajes de error en un archivo. Por lo tanto, el e-mail definirá el enlace de su cola al intercambio con la clave de enrutamiento "log.error". De esta manera, aunque el intercambio recibe todos los mensajes, la cola definida para el correo electrónico solo contendrá los mensajes de error. El registrador de archivos definirá una nueva cola separada vinculada al mismo intercambio y configurará una clave de enrutamiento diferente. Podría hacer tres enlaces separados para las tres claves de enrutamiento diferentes, o simplemente usar el comodín "log. *" Para solicitar todos los mensajes del intercambio que comiencen con el registro.

Este es un ejemplo simple que muestra cómo puede lograr lo que quiere hacer.

mirada here para ejemplos código de número de serie en concreto tutorial 5.

+0

¿Quiere decir que el consumidor puede recuperar un mensaje con una clave de enrutamiento específica en una cola? Parece que el consumidor no tiene elección, solo recibe todos los mensajes de la cola. – ThemeZ

+2

@ThemeZ los consumidores reciben todos los mensajes de la cola. Creo que es por definición El punto aquí es que están filtrados en el nivel de intercambio. Con un intercambio de temas, la cola solo recibirá ciertos mensajes. De esta forma, un consumidor leerá los mensajes que quiere porque la cola solo recibe los mensajes que desea el consumidor. – robthewolf

Cuestiones relacionadas