j'ai trois machines situées dans différents réseaux:Clustered wildfly 10 messagerie domaine
- comme maître
- as-node-1
- comme nœud-2
En tant que -master J'ai WildFly en tant que maître d'hôte de domaine et les deux nœuds ont WildFly en tant qu'hôte-serveur de domaine démarrant chacun une instance dans le groupe de serveurs full-ha. À partir de la console Web as-master, je peux voir les deux nœuds dans l'exécution du profil full-ha et si je déploie un WAR, il démarre correctement sur les deux nœuds. Maintenant, ce que j'essaye de réaliser est la messagerie entre les deux instances du WAR, c'est-à-dire envoyer un message d'une instance de producteur dans as-node-1, les consommateurs dans tous les nœuds devraient recevoir le message.
C'est ce que j'ai essayé: ajouté un sujet à wildfly domain.xml
:
<jms-topic name="MyTopic" entries="java:/jms/my-topic"/>
Créer un point de terminaison JAX-RS pour déclencher un producteur lié au sujet:
@Path("jms")
@RequestScoped
public class MessageEndpoint {
@Inject
JMSContext context;
@Resource(mappedName = "java:/jms/my-topic")
Topic myTopic;
@GET
public void sendMessage() {
this.context.createProducer().send(this.myTopic, "Hello!");
}
}
Créer une MDB écoute au sujet:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(
propertyName = "destination",
propertyValue = "java:/jms/my-topic"
),
@ActivationConfigProperty(
propertyName = "destinationType",
propertyValue = "javax.jms.Topic")
)
)
public class MyMessageListener implements MessageListener {
private final static Logger LOGGER = /* ... */
public void onMessage(Message message) {
try {
String body = message.getBody(String.class)
LOGGER.info("Received message: " + body);
} catch (JMSException e) {
throw new RuntimeException(e);
}
}
}
Mais quand je vois le curl as-node-1/jms
je o journal nly dans as-node-1, et quand I curl as-node-2/jms
je ne vois le log que dans as-node-2.
Le message ne doit-il pas être distribué sur tous les noeuds sur lesquels le fichier WAR est déployé? Qu'est-ce que je rate?