apache camel - marshall - ActiveMQ distribuido con camello
camel json (2)
Esta es una aplicación bastante directa, asíncrona y dirigida por eventos, que es adecuada para ActiveMQ y Camel.
En realidad, no mueve los mensajes explícitamente de una instancia de ActiveMQ a otra. La forma en que funciona es usar lo que se conoce como una red de corredores . En su caso, tendría tres agentes: ActiveMQ-purple, ActiveMQ-green y ActiveMQ-blue. ActiveMQ-purple crea una red de corredores unidireccional con ActiveMQ-green y ActiveMQ-blue. Esto permite que ActiveMQ-purple almacene y reenvíe mensajes a ActiveMQ-green y ActiveMQ-blue según la demanda del consumidor.
La aplicación Pedidos acepta pedidos en la cola de pedidos en ActiveMQ-purple. La aplicación Pedidos usa Camel para consumir y procesar un mensaje para determinar si es un mensaje de facturación o un mensaje de envío. Camel dirige los mensajes a la cola de facturación o a la cola de envío en ActiveMQ-purple.
La demanda del consumidor proviene de la aplicación de facturación y la aplicación de envío. La facturación usa Camel para consumir mensajes de la cola de facturación en ActiveMQ-green. La aplicación Envío usa Camel para consumir mensajes de la cola de envío en ActiveMQ-blue. Debido a la red de intermediarios y la demanda de los consumidores en la cola ActiveMQ-green.invoicing y la cola ActiveMQ-blue.shipping, los mensajes se reenviarán desde ActiveMQ-purple al intermediario y la cola correspondientes. No es necesario enrutar explícitamente los mensajes a un agente específico.
Espero que esto responda a sus preguntas. Déjame saber si tienes más.
Bruce
Estoy en el proceso de aprender ActiveMQ y Camel, con el objetivo de crear un pequeño prototipo de sistema que funcione de esta manera:
texto alternativo http://www.paulstovell.com/get/stackoverflow-questions/Queues.png (grande)
Cuando se coloca una orden en el sistema de Órdenes, se envía un mensaje a los suscriptores (un pub / subsistema), y pueden participar en el procesamiento de la orden. Las aplicaciones de pedidos , envío y facturación tienen sus propias instalaciones de ActiveMQ, de modo que si alguno de los tres sistemas está fuera de línea, los otros pueden continuar funcionando. Algo se encarga de mover los mensajes entre las instalaciones de ActiveMQ.
Conseguir que Apache Camel mueva mensajes de una cola a otra a través de rutas es bastante fácil, si están en la misma instancia de ActiveMQ. Así que esto funciona para gestionar las colas de suscripción.
El siguiente desafío es empujar los mensajes de una instancia de ActiveMQ a otra, y es el bit donde no estoy seguro de qué ver a continuación.
- ¿Puede Camel encaminar entre diferentes instalaciones de ActiveMQ? (No puedo averiguar cuál sería el URI de punto final de JMI si estuvieran en máquinas diferentes).
- Entiendo que ActiveMQ tiene capacidades de almacenamiento y reenvío . ¿Es esto lo que usaría para mover mensajes entre Pedidos y Envío / Facturación?
- ¿O es esto lo que Apache ServiceMix está destinado a resolver?
Hmmmm, solo he incursionado en el mejor de los casos, y no por un buen tiempo, pero intentaré ofrecer algo.
ActiveMQ puede enrutar entre diferentes instalaciones y solo utiliza URI estándar, por lo que no estoy seguro de cuál es el problema aquí. Pensaría que usando TCP estarías bien. Usando ServiceMix (lo mencionas más adelante), solo especificarías una conexión de fábrica y luego proporcionarías el URI en eso. Este enlace muestra algunos ejemplos http://servicemix.apache.org/servicemix-jms-new-endpoints.html .
Camel tiene soporte para Durable Subscriber si eso es lo que http://camel.apache.org/durable-subscriber.html ( http://camel.apache.org/durable-subscriber.html )? Este patrón asegurará que si el suscriptor está desconectado cuando el mensaje esté listo, se mantendrá hasta que el suscriptor vuelva a estar en línea. Esto también es compatible con ServiceMix (vea el enlace dado más arriba y busque "abonoDurable").