2017-10-08 11 views
0

Wildfly 10 Artemisインスタンスにデータを送信しようとして、Apache Camelを使用して戻します。 ここでは、これはcamel-jmsコンポーネントを使用して行うことができます。Wildfly 10に埋め込まれたArtemisインスタンスにデータを送信して戻します。Apache Camelを使用してください。

この場合、最初に、これが正常に動作しているかどうかを確認するための簡単な例を作成しました。 ただし、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) 

実装:

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(); 

定数:

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"; 

輸入:

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; 

しかしこれは、hereで説明したように純粋なjavax.jms(Camelではなく)を使用している場合にはうまくいきます。そしてそれは、私がアクティブなmqにメッセージを送るときにはうまくいきます(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(); 

私はWildfly埋め込まアルテミスinsnatnceにデータを送信している知っているとApacheキャメルを使用したバックそれらを受信したいです。 誰でもこれについて少しヒントを与えることができますか?

答えて

2

あなたが受信しているエラーは:8080をJNDI接続用:

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

これはあなたのWildflyインスタンスが実際にローカルホスト上で待機していないことを私に示しています。 Wildflyの設定やロギングは含まれていないので、これは単なる推測です。

また、「アクティブなmqにメッセージを送信すると正常に動作します(Wildfly Artemisではなく)」と言いますが、実際にはどういう意味かはっきりしません。 Apache ActiveMQ ArtemisはActiveMQブローカーです(名前が示唆しているように)ので、メッセージを「アクティブなmq」に送信したとき、スタンドアロンのArtemis(つまりWildflyに組み込まれていない)またはActiveMQ 5.xブローカーを意味するのかどうかは不明です。

最後に、Artemis "Wildfly Artemis"を呼び出すのは、ArtemisがWildflyプロジェクトではなくApacheのものなので、少し誤解を招く可能性があります。私は "Wildfly Artemis"であなたが本当に "ActiveMQ ArtemisはWildflyに埋め込まれている"と思っています。

+0

@ Justin、ありがとうございました。私の疑問の不明な部分には申し訳ありません。この場合、「active mq diretly」とは、スタンドアロンのActiveMQ 5.xブローカーに送信することを意味します。そして、はい、Wildfly Artemisに言及して、私はWildMyにActiveMQ Artemisを埋め込んでいたことを意味します。 – namalfernandolk

関連する問題