Configurer le réseau de courtiers file d'attente consommateur pour ne jamais être localhost à moins que l'échec du courtier

StackOverflow https://stackoverflow.com//questions/9689993

  •  13-12-2019
  •  | 
  •  

Question

J'ai une paire de courtiers configurés comme réseau de courtiers avec ActiveMQ 5.5.1. Chaque courtier existe sur un serveur qui communique sur un WAN.

brokera sur servera

<amq:broker useJmx="false" persistent="false">
    <amq:networkConnectors>
        <amq:networkConnector uri="static:(tcp://BrokerB:61616)" duplex="true" />
    </amq:networkConnectors>
    <amq:transportConnectors>
      <amq:transportConnector uri="tcp://BrokerA:61616" />
    </amq:transportConnectors>
</amq:broker>

brokerb sur serveurb

<amq:broker useJmx="false" persistent="false">
    <amq:networkConnectors>
        <amq:networkConnector uri="static:(tcp://BrokerA:61616)" duplex="true" />
    </amq:networkConnectors>
    <amq:transportConnectors>
        <amq:transportConnector uri="tcp://BrokerB:61616" />
    </amq:transportConnectors>
</amq:broker>

sur chaque serveur, j'ai un service Java en cours d'exécution qui crée le sujet et la file d'attente suivantes:

<amq:queue id="myQueue" physicalName="myQueue" />
<amq:topic id="myTopic" physicalName="MyTopic" />

Le service Java (sur chaque serveur) crée un producteur et un consommateur pour MyQueue ainsi qu'un producteur et un consommateur pour myTopic . Je veux les deux consommateurs sur mytopic pour recevoir tous les messages de sujet, ce qu'il fait. Le problème réside avec myqueue . Je veux seulement que le courtier configuré consomme MyQuee messages. Par exemple, si Brokera produit un message de service sur Servera, je veux seulement que le courtier sur Serverb soit consommer ce message. En ce moment, dans mon test, j'envoie environ 50% des messages produits sur Servera consommés par Brokera et 50% consommés par le courtier. En outre, si un brokerb est hors ligne, Brokera doit accepter tous les messages MyQueue à partir de Servera et Serverb et consommez tous les messages MyQueue jusqu'à ce que le brokerb revienne en ligne.

J'avais pensé à utiliser des groupes de messages, mais je ne pouvais pas trouver un bon moyen de détecter lorsque l'échec a eu lieu pour basculer quel groupe un message est envoyé. Toute recommandation serait grandement appréciée!

Était-ce utile?

La solution

Vous pouvez spécifier "excluredestinations" pour empêcher les messages d'une file d'attente d'aller à d'autres courtiers ...

<networkConnectors>
    <networkConnector uri="static:(tcp://BrokerB:61616)" duplex="true" >
        <excludedDestinations>
            <queue physicalName="myQueue"/>
        </excludedDestinations>
    </networkConnector>
</networkConnectors>

à votre autre question à propos de vous assurer que le consommateur "ne se connecte jamais au courtier local sauf défaut de courtier" ... Si vous effectuez les suivantes dans votre connexion client, vous vous connectez toujours à un courtier distant, à moins que son indisponible ...En outre, vous récupérerez au courtier à distance lorsqu'il devient disponible

failover:(tcp://remoteBroker,tcp://localBroker)?randomize=false&priorityBackup=true

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top