Distribué ActiveMQ avec Camel

je suis dans le processus de l'apprentissage ActiveMQ et à dos de Chameau, avec l'objectif de créer un peu de prototype de système qui fonctionne quelque chose comme ceci:

texte alternatif http://www.paulstovell.com/get/stackoverflow-questions/Queues.png (gros)

Lorsqu'une commande est placée dans le système de commandes, un message est envoyé à tous les abonnés (un pub/sous-système), et ils peuvent jouer leur rôle dans le traitement de la commande. ordres, expédition et Facturation les applications ont leurs propres installations ActiveMQ, de sorte que si l'un des trois systèmes est déconnecté, les autres peuvent continuer à fonctionner. quelque Chose s'occupe du déplacement des messages entre les installations ActiveMQ.

obtenir D'Apache Camel de déplacer les messages d'une file d'attente à une autre via des routes est assez facile, s'ils sont sur la même instance ActiveMQ. Cela fonctionne donc pour gérer les files d'attente d'abonnement.

le prochain défi est de pousser les messages d'une instance ActiveMQ à une autre, et c'est le moment où je ne sais pas quoi regarder ensuite.

  1. Peut Chameau route entre les différents ActiveMQ installations? (Je n'arrive pas à comprendre ce que serait L'URI de fin de JMI s'ils sont sur des machines différentes).
  2. je comprends ActiveMQ a stocker et de transférer capacités. Est-ce que c'est ce que j'utiliserais pour déplacer les messages entre les ordres et Expédition / Facturation?
  3. Ou est-ce que Apache ServiceMix est censée résoudre?
17
demandé sur рüффп 2010-02-17 12:10:40

2 réponses

il s'agit d'une application asynchrone assez simple, axée sur les événements, qui convient bien à ActiveMQ et Camel.

en fait, vous ne déplacez pas les messages explicitement d'une instance ActiveMQ à une autre. Elle fonctionne à l'aide de ce qu'on appelle un réseau de courtiers. Dans votre cas, vous auriez trois courtiers: ActiveMQ-purple, ActiveMQ-green et ActiveMQ-blue. ActiveMQ-purple crée un réseau de courtage unidirectionnel avec ActiveMQ-green et ActiveMQ-blue. Ce permet à ActiveMQ-purple de stocker et de transmettre des messages à ActiveMQ-green et ActiveMQ-blue en fonction de la demande des consommateurs.

l'application Orders accepte les commandes dans la file d'attente des commandes sur ActiveMQ-purple. L'application Orders utilise Camel pour consommer et traiter un message afin de déterminer s'il s'agit d'un message de facturation ou d'un message d'expédition. Camel achemine les messages vers la file d'attente de facturation ou la file d'attente d'expédition sur ActiveMQ-purple.

la demande des consommateurs provient de l'application de facturation et de la Application d'expédition. La facturation utilise Camel pour consommer les messages de la file d'attente de facturation sur ActiveMQ-green. L'application D'expédition utilise Camel pour consommer les messages de la file D'attente d'expédition sur ActiveMQ-bleu. En raison du réseau de courtiers et de la demande des consommateurs sur L'ActiveMQ-Vert.la file d'attente de facturation et L'ActiveMQ-bleu.file d'attente d'expédition, les messages seront transmis de ActiveMQ-purple au courtier et à la file d'attente appropriés. Il n'est pas nécessaire d'acheminer explicitement les messages à un courtier en particulier.

j'espère que cela répondra à vos questions. Laissez-moi savoir si vous avez plus.

Bruce

19
répondu bsnyder 2010-03-03 04:20:44

Hmmmmm, Je n'ai parlé que du mieux, et pas depuis longtemps, mais je vais essayer d'offrir quelque chose.

ActiveMQ peut faire le trajet entre différentes installations et utilise simplement L'URIs standard à ma connaissance, donc je ne suis pas sûr de savoir quel est le problème ici. Je pense que tu peux utiliser TCP. En utilisant ServiceMix (vous le mentionnez plus tard), vous spécifiez simplement un connectionFactory et vous y fourniriez l'URI. Ce lien montre quelques exemples http://servicemix.apache.org/servicemix-jms-new-endpoints.html.

Camel a le soutien pour L'abonné Durable si c'est ce que vous étiez après (http://camel.apache.org/durable-subscriber.html)? Ce modèle garantira que si l'abonné est déconnecté lorsque le message est prêt, il sera retenu jusqu'à ce que l'abonné soit de nouveau en ligne. Ceci est également supporté par ServiceMix (voir lien ci-dessus et rechercher "subscriptionDurable").

1
répondu Neil 2010-02-17 23:18:51