Springboot API не использует сообщения из очереди Jboss при развертывании на сервере EAP 7 - PullRequest
0 голосов
/ 13 июня 2019

У меня есть работающий код Springboot, который действует как прослушиватель и принимает сообщения из очереди Jboss EAP 7 при развертывании кода на сервере STS Tomcat.

Теперь мне нужно развернуть тот же код на сервере jboss EAP 7, где есть очередь.

При развертывании кода я получаю сообщение, что война развернута успешно. После этого журналы NO ERROR или SUCCESS не печатаются.

Однако, когда я проверяю очередь, она не показывает потребителей. Я попытался проверить журналы в режиме отладки, и все, что я получаю, это сообщение ниже. Как я могу развернуть это на jboss и требуется ли какая-либо конкретная конфигурация? тот же код работает, если мы развернем на Tomcat и используем из jboss Q

2019-06-13 22:05:30,715 FINE  [javax.enterprise.resource.webcontainer.jsf.config] (ServerService Thread Pool -- 133) Completed initializing Mojarra (2.2.12-jbossorg-2 ) for context ''{0}''
2019-06-13 22:05:30,715 FINE  [javax.enterprise.resource.webcontainer.jsf.timing] (ServerService Thread Pool -- 133)  [TIMING] - [1025ms] : Initialization of context 
2019-06-13 22:05:30,716 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 133) WFLYUT0021: Registered web context: /
2019-06-13 22:05:30,730 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 129) WFLYSRV0010: Deployed "Sample-0.0.1.war" (runtime-name : "Sample-0.0.1.war")
2019-06-13 22:05:30,730 DEBUG [org.jboss.as.server.deployment.scanner] (ServerService Thread Pool -- 133) Updating status after deployment notification for Sample-0.0.1.war
2019-06-13 22:05:32,942 DEBUG [org.apache.activemq.artemis.core.server] (activemq-expiry-reaper-thread) Cannot expire from jms.queue.ExpiryQueue into jms.queue.ExpiryQueue

Моя конфигурация очереди приведена ниже:

    @Bean JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
    DefaultJmsListenerContainerFactoryConfigurer configurer) throws NamingException  { 
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(getConnectionFactory());        
    return factory;

}   

private ConnectionFactory getConnectionFactory() throws NamingException {

    Context namingContext = null;        
    final Properties env = new Properties();
    String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory";
    String JBOSSQ_USERNAME = "admin";
    String JBOSSQ_PASSWORD = "admin";
    String INTIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory";
    String PROVIDER_URL = "http-remoting://127.10.10.101:8080";


    env.put(Context.INITIAL_CONTEXT_FACTORY,INTIAL_CONTEXT_FACTORY);
    env.put(Context.PROVIDER_URL,System.getProperty(Context.PROVIDER_URL,PROVIDER_URL));

    try {
        namingContext = new InitialContext(env);

    } catch (NamingException e) {

        e.printStackTrace();
    }


    ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup(DEFAULT_CONNECTION_FACTORY);
    UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter(); 
    userCredentialsConnectionFactoryAdapter.setUsername(JBOSSQ_USERNAME); 
    userCredentialsConnectionFactoryAdapter.setPassword(JBOSSQ_PASSWORD); 
    userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(connectionFactory); 
    return userCredentialsConnectionFactoryAdapter;

    }

Мой код потребителя, как показано ниже:

    @JmsListener(destination = "testingQ", containerFactory = "myFactory")
public void receiveMessage(String msg) {

    System.out.println("Received :" + msg);

1 Ответ

0 голосов
/ 14 июня 2019

В соответствии с конфигурацией, указанной в вашем коде, вы используете jms/RemoteConnectionFactory в качестве фабрики соединений по умолчанию, что означает, что вы пытаетесь подключиться к очереди, созданной на удаленном сервере JMS. Это будет работать, если ваше приложение развернуто на одном сервере, а JMS - на другом (удаленном сервере). Вот почему это успешно работает, когда ваше приложение находится на сервере Tomcat и JMS на сервере JBoss.

Чтобы исправить проблему, вы должны использовать InVMConnectionFactory. Создайте локальную фабрику соединений и связанные конфигурации и укажите созданную фабрику соединений в своем коде. Если создана фабрика соединений с записью JNDI как «jms / ConnectionFactory», то ваша конфигурация будет такой:

String DEFAULT_CONNECTION_FACTORY = "jms/ConnectionFactory";

Примечание : также проверьте, правильны ли другие ваши конфигурации, такие как PROVIDER_URL (протокол + хост + порт), фабрика контекста.

...