Как отправить и потребить сообщение из загрузки Spring в автономный JBoss Wildfly 10 Artemis Activemq?

Я написал приложение Spring Boot, которое направлено на отправку и использование сообщения от JBoss Wildfly 10 ActiveMQ Artemis (ПРИМЕЧАНИЕ: не Apache ActiveMQ 5.x). Я запускаю этот код через Spring Tool Suite.

Я также установил JBoss Wildfly 10 в своей локальной системе (на порту 8080) и запустил то же самое в профиле standalone-full.xml, чтобы создать очередь с именем TestQ в подсистемах обмена сообщениями Wildfly.

Затем я использовал JMSTemplate в коде загрузки Spring для отправки и использования сообщения в вышеупомянутой очереди со следующими вещами в application.properties:

spring.activemq.username=admin
spring.activemq.username=admin
spring.activemq.broker-url=http://localhost:8080

Однако при выполнении кода я получаю Could not send message ошибку.

Не могли бы вы подсказать, какие изменения потребуются?

Моя основная цель - отправить и потребить сообщение из этой внешней очереди с помощью Spring Boot.

Я пробовал альтернативы в сети, но каждый полученный мной пример относится к Apache ActiveMQ, а не к ActiveMQ Artemis, встроенному в JBoss Wildfly, который требуется.

У меня есть 2 класса ниже:

1.

@SpringBootApplication
@EnableJms
public class App  {

    @Bean
    public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
                                                    DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

    public static void main(String[] args) {
        // Launch the application
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);

        JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);

        System.out.println("Sending a JMS message.");
        jmsTemplate.convertAndSend("sampleQueue", "Hello world!");
    } 
}

2.

@Component
public class ReceiveMessage {

    @JmsListener(destination = "sampleQueue")
    public void receiveMessage(String msg) {
        System.out.println("Received :" + msg);
    }
}

person Ralph Rockmore    schedule 28.05.2019    source источник
comment
НАСТОЯТЕЛЬНОЕ ПРЕДЛОЖЕНИЕ: установите org.apache.activemq.artemis ведение журнала на ОТЛАДКУ (как на клиенте, так и на сервере, если разные хосты / разные приложения WildFly), перезапустите серверы приложений и повторно запустите несколько сквозных тестов. Это, вероятно, самый быстрый / самый эффективный способ определить: 1) кто терпит неудачу и 2) что именно является ошибкой.   -  person paulsm4    schedule 28.05.2019
comment
Я упомянул URL-адрес брокера activemq выше. Это нормально для автономной дикой мухи?   -  person Ralph Rockmore    schedule 28.05.2019


Ответы (1)


Мне кажется, что свойства в application.properties предназначены для клиента ActiveMQ 5.x, а не для клиента ActiveMQ Artemis. Как В документации Spring Boot говорится:

Конфигурация Artemis управляется внешними свойствами конфигурации в spring.artemis.*.

Кроме того, вы должны предоставить порт на Wildfly напрямую брокеру ActiveMQ Artemis, а не использовать консолидированный порт 8080, поскольку для этого необходимо, чтобы httpUpgradeEnabled был установлен на true в URL-адресе клиента Artemis, и нет способа сделать это с помощью интеграции Spring Boot. по какой-то причине.

person Justin Bertram    schedule 28.05.2019
comment
Это хорошее предположение ... но я ненавижу догадки. +1, и я призываю OP попробовать это (и принять ваш ответ, если он работает). В: Что бы вы посоветовали, если это не сработает? Мой голос - подробный лог. У вас есть альтернативное предложение? В: Что хорошего, Hello world, чтобы убедиться, что у вас есть хорошая установка и настройка ActiveMQ Artemis? Какие-либо предложения? - person paulsm4; 29.05.2019
comment
Я попытался изменить свойства, как показано ниже, в этом случае я не получил сообщения об ошибке, но сообщение также не было помещено в очередь: spring.artemis.mode = native spring.artemis.host = 127.0.0.1 spring.artemis.port = 8080 spring.artemis.user = jboss spring.artemis.password=jboss@123 Что еще я мог бы включить? Или вместо JMSTemplate какой-нибудь другой метод, который я мог бы использовать? - person Ralph Rockmore; 29.05.2019
comment
Я обновил свой комментарий, чтобы ответить на ваш вопрос, Ральф. Короче, думаю, ваша проблема в использовании 8080. Вам нужно подключиться напрямую к Artemis. - person Justin Bertram; 29.05.2019
comment
Да, я пытался изменить порт в свойствах на 61616, но он все равно не работает. У вас есть какой-нибудь простой код, базовый весенний загрузочный код, который отправляет сообщение в очередь jboss wildfly, чтобы я мог использовать его в качестве справки? - person Ralph Rockmore; 30.05.2019
comment
Вы изменили конфигурацию Wildfly, чтобы открыть порт 61616? По умолчанию этот порт не отображается. В комплекте с брокером Artemis поставляется пример загрузки Sping, который можно см. в Интернете, но он не использует Wildfly и использует клиент AMQP, а не основной клиент Artemis. - person Justin Bertram; 30.05.2019
comment
@RalphRockmore, можете ли вы опубликовать ответ на свой вопрос, если вы решили свою проблему? я столкнулся с той же проблемой и не знал, как ее исправить - person Devilluminati; 28.10.2020