ActiveMQ Artemis через HTTP

Цель

У меня есть сервер, на котором весь трафик на любой общедоступный IP-адрес проходит через прокси. Я настроил https_proxy и http_proxy. Я хочу подключиться к ActiveMQ Artemis, работающему в облаке, с общедоступным IP-адресом.

Теперь, когда я нажимаю команду curl в консоли управления ActiveMQ, я получаю ответ, что означает, что я могу связаться с сервером.

<!DOCTYPE html>
<html>

<head>
  <meta charset = "UTF-8" />
  <title>Hawtio</title>
  <base href='/activemq/'>
  <link id = "favicon" rel = "icon" type = "image/x-icon" href = "img/favicon.ico?v=1">

  <link rel = "stylesheet" href = "css/lib-6a1e4ce9ea.css"/>

  <link rel = "stylesheet" href = "css/app-9653e9917c.css"/>

  <!-- branding -->
  <link id = "branding" rel = "stylesheet" type = "text/css" href = "" />

  <script src = "js/lib-e53c220218.js" defer></script>

  <script src = "js/app-fafe513f4b.js" defer></script>
</head>


<body>
  <hawtio-login></hawtio-login>
</body>

</html>

Если я подключаюсь к серверу ActiveMQ по телнету, время ожидания истекает.

telnet <ip> 61616

брокер.xml

<acceptor name = "artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;supportAdvisory=false;suppressInternalManagementObjects=false</acceptor>

Что я пробовал?

Я пытался настроить Netty по протоколу HTTP, но время ожидания все равно истекло.

artemis producer --url "tcp://<ip>:61616?httpEnabled=true" --user "artemis" --password "artemis" --message-count 1

Я получаю эту ошибку:

Exception in thread "main" javax.jms.JMSException: Failed to create session factory
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:915)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:314)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:309)
    at org.apache.activemq.artemis.cli.commands.messages.Producer.execute(Producer.java:142)
    at org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:219)
    at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:165)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:157)
    at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:64)
Caused by: ActiveMQNotConnectedException[errorType=NOT_CONNECTED message=AMQ219007: Cannot connect to server(s). Tried with all available servers.]
    at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:735)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:913)
    ... 11 more

Почему вы пытаетесь использовать HTTP для обмена сообщениями? Почему бы просто не использовать стандартный протокол обмена сообщениями, такой как AMQP или STOMP, или даже специальный протокол обмена сообщениями ActiveMQ, такой как Core или OpenWire?

Justin Bertram 07.05.2024 22:10

Добавил рассматриваемую ошибку. Что касается того, почему я пытаюсь использовать HTTP - я могу curl консоль, подразумевает, что сеть через уровень 7 проходит через брандмауэр, но когда я telnet, я вижу тайм-аут, подразумевающий, что уровень 4 не работает. Хотя не существует жесткого правила использования только HTTP.

Subhidh Agarwal 08.05.2024 06:39

Это указывает на то, что проблема в сетевой инфраструктуре, не так ли? Что может с этим сделать брокер?

Justin Bertram 08.05.2024 06:57

Да, согласен. На уровне 4 речь идет о сетевой инфраструктуре. Но поскольку уровень 7 работает, я подумал об HTTP.

Subhidh Agarwal 08.05.2024 07:06

И да, если на уровне 7 нет возможности, мне все равно придется поговорить с инфраструктурной командой. Я просто искал более простой вариант.

Subhidh Agarwal 08.05.2024 07:09

Что произойдет, если вы пойдете к брокеру напрямую, а не через прокси?

Justin Bertram 08.05.2024 07:09

HTTP на самом деле не является хорошим протоколом для обмена сообщениями, поскольку он был разработан для совершенно другого варианта использования. Если есть шанс избежать его использования, попробуйте. Он действительно предназначен для сред, где у вас нет абсолютно никакого выбора. В любом случае, я не думаю, что клиент или брокер действительно могут что-то сделать, поскольку проблема, похоже, где-то в сети.

Justin Bertram 08.05.2024 07:11

С этого сервера, на котором установлен этот прокси, не удается связаться с сервером AMQ. Я получаю ту же ошибку. Если я попытаюсь использовать любую другую машину без ограничений сети, я легко смогу связаться с брокером (брокер общедоступен в Интернете).

Subhidh Agarwal 08.05.2024 07:12

Я понимаю. Хорошо, в этом случае это будет отсортировано из сетевой инфраструктуры, чтобы включить также уровень 4.

Subhidh Agarwal 08.05.2024 07:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

HTTP на самом деле не является хорошим протоколом для обмена сообщениями, поскольку он был разработан для совершенно другого варианта использования. Если есть шанс избежать его использования, попробуйте. Он действительно предназначен для сред, где у вас нет абсолютно никакого выбора. В любом случае, я не думаю, что клиент или брокер действительно могут что-то сделать, поскольку проблема, похоже, где-то в сети.

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