Отправка данных во встроенный экземпляр Artemis Wildfly 10 и получение их обратно ИСПОЛЬЗОВАНИЕМ Apache Camel

Я пытаюсь отправить некоторые данные в экземпляр Wildfly 10 Artemis и получить их обратно с помощью Apache Camel. Здесь я знаю, что это можно сделать с помощью компонента camel-jms.

В этом случае сначала я создал простой пример, чтобы проверить, работает ли он нормально или нет. Но это дает ниже исключение в точке создания 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="jmsuser@123";  
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;

Но это происходит успешно, когда я использую чистый 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 и получение их обратно, ИСПОЛЬЗУЯ Apache Camel. Кто-нибудь может дать небольшой совет по этому поводу?

1 ответ

Ошибка, которую вы получаете:

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

Это указывает на то, что ваш экземпляр Wildfly фактически не прослушивает localhost:8080 для соединений JNDI. Вы не включили конфигурацию или регистрацию Wildfly, так что это только предположение.

Также вы сказали, что "это работает успешно, когда я отправляю сообщения активному mq напрямую (не в Wildfly Artemis)", но не ясно, что это на самом деле означает. Apache ActiveMQ Artemis является (как следует из названия) брокером ActiveMQ, поэтому, когда вы говорите, что отправляете сообщения "active mq", неясно, имеете ли вы в виду автономного Artemis (т.е. не встроенного в Wildfly) или ActiveMQ 5.x брокера.

Наконец, называть Артемиду "Wildfly Artemis" может немного вводить в заблуждение, поскольку Артемида - это не проект Wildfly, а Apache. Я предполагаю, что под "Wildfly Artemis" вы действительно имеете в виду "ActiveMQ Artemis, встроенный в Wildfly".

Другие вопросы по тегам