2017-10-08 9 views
0

J'essaie d'envoyer des données à l'instance de Wildfly 10 Artemis et de les récupérer à l'aide d'Apache Camel. Ici, je sais que cela peut être fait en utilisant le composant camel-jms.Envoi de données à une instance Artemis intégrée de Wildfly 10 et récupération de celles-ci. UTILISATION d'Apache Camel

Dans ce cas, j'ai d'abord créé un exemple simple pour vérifier si cela fonctionne bien ou non. Mais il donne une exception ci-dessous au point de création ConnectionFactory.

Exception in thread "main" javax.naming.NamingException: Failed to connect to any server. Servers tried: [http-remoting://localhost:8080] 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.failOverSequence(HaRemoteNamingStore.java:213) 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.namingStore(HaRemoteNamingStore.java:144) 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.namingOperation(HaRemoteNamingStore.java:125) 
    at org.jboss.naming.remote.client.HaRemoteNamingStore.lookup(HaRemoteNamingStore.java:241) 
    at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:79) 
    at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:83) 
    at javax.naming.InitialContext.lookup(InitialContext.java:417) 

mise en œuvre:

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
props.put(Context.PROVIDER_URL, WILDFLY_REMOTING_URL); 
props.put(Context.SECURITY_PRINCIPAL, JMS_USERNAME); 
props.put(Context.SECURITY_CREDENTIALS, JMS_PASSWORD); 

InitialContext context = new InitialContext(props); 
ConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup(JMS_CONNECTION_FACTORY_JNDI); 
System.out.println("connectionFactory : " + connectionFactory); 

SimpleRouteBuilder routeBuilder = new SimpleRouteBuilder(); 
CamelContext ctx = new DefaultCamelContext(); 
ctx.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); 

ctx.addRoutes(routeBuilder); 
ctx.start(); 
Thread.sleep(5 * 60 * 1000); 
ctx.stop(); 

Constantes:

public final static String JMS_CONNECTION_FACTORY_JNDI="jms/RemoteConnectionFactory"; 
public final static String JMS_QUEUE_JNDI="jms/queue/TestQ"; 
public final static String JMS_USERNAME="jmsuser";  // The role for this user is "guest" in ApplicationRealm 
public final static String JMS_PASSWORD="[email protected]"; 
public final static String WILDFLY_REMOTING_URL="http-remoting://localhost:8080"; 

Importations:

import java.util.Properties; 
import javax.jms.ConnectionFactory; 
import org.apache.camel.CamelContext; 
import org.apache.camel.component.jms.JmsComponent; 
import org.apache.camel.impl.DefaultCamelContext; 
import javax.jms.QueueConnectionFactory; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

Mais cela se passe avec succès lorsque j'utilise javax.jms pur (pas par Camel) comme mentionné dans here. Et cela fonctionne avec succès lorsque j'envoie des messages à mq actif directement (pas à Wildfly Artemis).

SimpleRouteBuilder routeBuilder = new SimpleRouteBuilder(); 
CamelContext ctx = new DefaultCamelContext(); 

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://0.0.0.0:61616"); 
ctx.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); 

ctx.addRoutes(routeBuilder); 
ctx.start(); 
Thread.sleep(5 * 60 * 1000); 
ctx.stop(); 

Ce que je veux savoir envoie des données à un wildfly intégré Artemis insnatnce et les récupéreront Apache Camel UTILISATION. Quelqu'un peut-il donner un petit conseil à ce sujet?

Répondre

2

L'erreur que vous recevez est:

Failed to connect to any server. Servers tried: [http-remoting://localhost:8080] 

Cela me indique que votre instance wildfly est pas réellement à l'écoute sur localhost: 8080 pour les connexions JNDI. Vous n'avez pas inclus de configuration ou de journalisation Wildfly, ce n'est qu'une supposition.

Vous avez également dit que "cela fonctionne avec succès lorsque j'envoie des messages directement à mq actif (pas à Wildfly Artemis)", mais ce que cela signifie n'est pas clair. Apache ActiveMQ Artemis est (comme son nom l'indique) un courtier ActiveMQ donc quand vous dites que vous avez envoyé des messages à "mq active", vous ne savez pas si vous voulez dire Artemis autonome (c'est-à-dire non intégré dans Wildfly) ou le courtier ActiveMQ 5.x. Enfin, appeler Artemis "Wildfly Artemis" peut être un peu trompeur car Artemis n'est pas un projet Wildfly mais un projet Apache. Je suppose que par "Wildfly Artemis" vous voulez vraiment dire "ActiveMQ Artemis intégré dans Wildfly."

+0

@ Justin, Merci pour la réponse. Et désolé pour les zones peu claires dans ma question. Dans ce cas, en mentionnant "active mq diretly", il faut envoyer au broker ActiveMQ 5.x autonome. Et oui en mentionnant Wildfly Artemis je voulais dire ActiveMQ Artemis intégré dans Wildfly. – namalfernandolk