Подключение JMS к Red Hat AMQ 7, работающему на Openshift, с использованием защищенного маршрута

Мы используем AMQ 7 на Openshift 3.11. При попытке подключить Java-клиенты с помощью JMS с платформы Openshift проблем нет. Однако для доступа к нему с внешнего клиента я создал безопасный маршрут к порту 61617. В Openshift этот маршрут должен быть доступен как https://my-route:443, и я могу пропинговать свой маршрут . Но как я могу использовать это для установления соединения JMS, я продолжаю получать:

javax.jms.JMSException: Failed to create session factory
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:886)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:299)
    at be.digipolis.artemis_consumer.ArtemisConsumerApplication.run(ArtemisConsumerApplication.java:39)
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
    at be.digipolis.artemis_consumer.ArtemisConsumerApplication.main(ArtemisConsumerApplication.java:25)
Caused by: ActiveMQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=AMQ219013: Timed out waiting to receive cluster topology. Group:null]
    at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:821)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:884)
    ... 8 more

Мой код:

Connection connection = null;
InitialContext initialContext = null;

try {
    initialContext = new InitialContext();
    Queue queue = (Queue) initialContext.lookup("queue/hugo");
    ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("ConnectionFactory");
    connection = cf.createConnection(USERNAME, PASSWORD);
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    MessageProducer producer = session.createProducer(queue);
    TextMessage message = session.createTextMessage("This is a text message");
    logger.info("Sent message: ", message.getText());
    producer.send(message);
    MessageConsumer consumer = session.createConsumer(queue);
    connection.start();
    TextMessage messageReceived = (TextMessage) consumer.receive(5000);
    logger.info("Received message : ", messageReceived);
    initialContext.close();
} catch (NamingException | JMSException e) {
    logger.error("Exception", e);
    e.printStackTrace();
} finally {
    if (initialContext != null) {
        initialContext.close();
    }
    if (connection != null) {
        connection.close();
    }
}

И jndi.properties:


java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
connectionFactory.ConnectionFactory=tcp://my-route:443
queue.queue/hugo=hugo

Мне пришлось уже использовать tcp вместо https, иначе я получаю «недопустимый URL-адрес брокера».

Если бы кто-то мог указать мне в правильном направлении, это было бы здорово.


person HBoss    schedule 23.03.2020    source источник
comment
Спасибо, я добавил трассировку стека выше.   -  person HBoss    schedule 24.03.2020


Ответы (1)


Попробуй это:

tcp://my-route:443?httpEnabled=true&sslEnabled=true
person Justin Bertram    schedule 24.03.2020
comment
Спасибо за ответ... Ошибка меняется на: Вызвано: ActiveMQNotConnectedException [errorType=NOT_CONNECTED message=AMQ219007: Не удается подключиться к серверу(ам). Пробовал со всеми доступными серверами.] - person HBoss; 24.03.2020