2010-09-24 6 views
1

J'ai le problème suivant: J'ai plusieurs sites avec un courtier ActiveMQ local qui transmet à un courtier distant (dans un centre de données). Cette connexion est souvent instable, et descend plusieurs fois par mois pendant quelques minutes ou quelques heures à la fois.Transfert d'ActiveMQ d'un courtier local à un courtier distant [avec une connexion instable]

Les messages doivent donc attendre sur le courtier local si le courtier distant n'est pas accessible pour le moment.

J'ai la configuration ActiveMQ suivante:

<networkConnectors> 

      <networkConnector uri="static://(tcp://my-remote-broker:61616)" 
       name="myremotebroker" dynamicOnly="false" 
       conduitSubscriptions="true" 
       decreaseNetworkConsumerPriority="false"> 

        <!-- Exclude all destinations by default --> 

        <excludedDestinations> 
          <queue physicalName=">" /> 
          <topic physicalName=">" /> 
        </excludedDestinations> 

        <!-- Only forward these to our connection --> 

        <staticallyIncludedDestinations> 
          <topic physicalName="MySpecialTopic"/> 
        </staticallyIncludedDestinations> 
      </networkConnector> 
    </networkConnectors> 

Ce transmet les messages du courtier local (sur le sujet MySpecialTopic), au courtier à distance. Cela fonctionne lorsque la connexion est stable.

Cependant, j'ai essayé temporairement de désactiver la connexion Internet, de sorte que le courtier local a perdu la connexion avec le courtier distant. À ce moment, j'ai envoyé un nouveau message, qui a été mis en file d'attente sur le courtier local, mais n'est jamais arrivé sur le courtier distant, même après que le courtier local se soit reconnecté!

Y at-il quelque chose dans la configuration ActiveMQ qui me manque?

Merci!

+0

Quel serveur J2EE et MQ courez-vous? Courez-vous WebSphere? Parce que si c'est le cas, ils ont une fonctionnalité vraiment impressionnante appelée bus étrangers qui résout réellement ce problème. –

+0

Bonjour Chris, Je teste ceci avec ActiveMQ seul, puisque son panneau de contrôle a un moyen d'envoyer des messages manuellement à des fins de test. Ne pas exécuter Websphere. Il a essentiellement besoin de fonctionner sur ActiveMQ tout seul, donc il ne dépend pas d'un serveur d'applications. –

Répondre

0

Vous utilisez un TOPIC, qui est aléatoire. Cela signifie que l'envoi d'un message alors que la connexion est arrêtée sera perdu, ce qui est le comportement standard pour un sujet (seuls les abonnés qui sont abonnés au moment de l'envoi du message recevront le message). (http://activemq.apache.org/how-does-a-queue-compare-to-a-topic.html)

Vous devez utiliser une file d'attente si vous souhaitez que le consommateur distant reçoive le message OU configurer vos abonnés en tant qu'abonnés durables pour assurer qu'ils recevront des messages à tout moment. (http://activemq.apache.org/how-do-durable-queues-and-topics-work.html)

+0

Tous mes consommateurs sont des abonnés durables. Cela fait un moment que ce problème est survenu, et depuis que j'ai déménagé à RabbitMQ. Le principal problème que j'avais était que parfois ActiveMQ se déconnecterait/reconnecterait plusieurs fois, et son répertoire de données KahaDB serait corrompu. Dans ces cas, je ne pouvais même pas redémarrer ActiveMQ sans supprimer le répertoire data /. –

+0

Hmm .. je suis familier avec les problèmes de KahaDB, pas avec les consommateurs durables ne recevant pas les messages sur un réseau de failover .. cependant, il y a eu d'autres étranges choses dans ce domaine (Plusieurs Advisory Queue ont le même problème et un bug) que j'ai signalé a été accepté pour la prochaine version) de toute façon .. heureux que vous l'ayez résolu. BTW: comment fonctionne RabbitMQ sur le net? Nous avons choisi ActiveMQ à un moment donné, mais j'envisage de passer à RabbitMQ car la stabilité reste un problème avec ActiveMQ: s – Noctris

Questions connexes