RabbitMQ Camel и STOMP

Я успешно завершил POC с помощью клиента Spring Reactor Netty Stomp (среда обмена сообщениями Spring) для подключения к RabbitMQ через порт 61613 (порт, выделенный для STOMP). Это был просто POC. Теперь мне нужно создать что-то конкретное, чтобы иметь возможность развертывать в производственной среде. Я искал в Google Spring Messaging vs Spring Integration и наткнулся на Apache Camel.

На странице компонента RabbitMQ в документации Camel говорится о порте 5672, и это AMQP. На странице компонента STOMP рассказывается об ActiveMQ.

Я не видел никаких примеров или документации относительно Camel в сочетании с RabbitMQ и STOMP.

Можно ли использовать Apache Camel для подключения к RabbitMQ через порт 61613?


person Mahesh    schedule 21.11.2019    source источник


Ответы (1)


В документации Camel для компонента STOMP говорится:

Компонент Stomp используется для связи с совместимыми со Stomp брокерами сообщений, такими как Apache ActiveMQ или ActiveMQ Apollo.

Обратите внимание, что там написано как Apache ActiveMQ. Он не говорит, что это должен быть Apache ActiveMQ. Он просто использует ActiveMQ как пример «совместимого с Stomp» брокера сообщений. Если RabbitMQ поддерживает STOMP, то компонент STOMP Camel должен работать без проблем.

Глядя на Camel StompEndpoint явно использует brokerURL из конфигурации для подключения к брокеру Stomp. Он использует реализацию клиента Fusesource Stomp который должен работать с любым брокером, совместимым с Stomp.

Также стоит отметить, что Camel - это платформа интеграции, а Stomp - это простой открытый протокол обмена сообщениями, поэтому для компонента Stomp в Camel нет особого смысла работать только с парой брокеров ActiveMQ. Он может (и будет) работать с любым брокером, совместимым со Stomp (как указано в документации).

person Justin Bertram    schedule 21.11.2019
comment
RabbitMQ поддерживает STOMP. Я получаю это исключение, когда пытаюсь подключиться к STOMP Broker org.apache.camel.FailedToCreateRouteException: Не удалось создать маршрут route1: Route (route1) [[From [Stomp: queue: test? BrokerURL = tcp: // localho .. . из-за Не удалось разрешить конечную точку: stop: // queue: test? brokerURL = tcp% 3A% 2F% 2Flocalhost% 3A61613 & login = guest & passcode = guest из-за: Не удалось разрешить конечную точку: stop: // queue: test? brokerURL = tcp % 3A% 2F% 2Flocalhost% 3A61613 & login = guest & passcode = guest из-за: Есть 3 параметра, которые не могут быть установлены на конечной точке. - person Mahesh; 22.11.2019
comment
Можете попробовать удалить brokerURL=tcp%3A%2F%2Flocalhost%3A61613 из конфигурации конечной точки? Значение по умолчанию для brokerURL уже tcp://localhost:61613. Посмотрите, устраняет ли это ошибку. - person Justin Bertram; 22.11.2019
comment
Я пробовал это. Это не сработало. Насколько я понимаю, конечные точки Stomp имеют вид Stomp: // .... ActiveMQ поддерживает этот тип URI. RabbitMQ этого не делает. В RabbitMQ включен плагин Stomp, но он работает с tcp. Попробую tcp как схему и что получится - person Mahesh; 22.11.2019
comment
stomp:// в начале конфигурации конечной точки Camel означает, что Camel использует свой компонент «Stamp». Фактическое соединение, которое он создает с брокером, зависит от конфигурации brokerURL. В любом случае реализации клиента Stomp используют TCP для связи с брокером Stomp независимо от схемы, используемой для их URL-адреса; это довольно ясно из спецификации Stomp. Кроме того, ошибка указывает на наличие проблемы с конфигурацией конечной точки, поэтому он даже не пытается создать фактическое соединение с брокером Stomp, поэтому вы еще не можете сказать, что он не будет работать с RabbitMQ. - person Justin Bertram; 22.11.2019
comment
Я заглянул в код верблюда. Схема используется как есть. с установкой ACtiveMQ он работает, но не с RabbitMQ. Я продолжу работу над Spring Messaging или Spring Integration. - person Mahesh; 23.11.2019
comment
Какой код Camel вы специально изучили, и что вы имеете в виду, говоря, что схема используется как есть? Я только что посмотрел на Camel _ 1_ и явно использует brokerURL из конфигурации для подключения к брокеру Stomp. Он использует реализацию клиента Fusesource Stomp который должен работать с любым брокером, совместимым с Stomp. - person Justin Bertram; 24.11.2019
comment
Также стоит отметить, что Camel - это платформа интеграции, а Stomp - это простой открытый протокол обмена сообщениями, поэтому для компонента Stomp в Camel нет особого смысла работать только с парой брокеров ActiveMQ. Он может (и будет) работать с любым брокером, совместимым со Stomp (как указано в документации). - person Justin Bertram; 24.11.2019
comment
Приносим извинения за задержку с ответом. Я все еще не мог устранить ошибку конечной точки. Затем я попробовал использовать последнюю версию, изменив свой pom.xml. На этот раз сообщение об ошибке изменилось и показало ПЛОХОЕ СОЕДИНЕНИЕ. Я был по крайней мере :) Копание глубже показало, что он пытался подключиться к vhost как localhost. Когда мы не указываем host в качестве опции, он принимает localhost как vhost. Теперь я должен проверить, как установить версию STOMP. В документе ничего не говорится о параметре версии. По умолчанию используется версия 1.1. Спасибо. - person Mahesh; 26.11.2019
comment
Я внес изменения в классы StompConfiguration и StompEndpoint компонента camel-stop. Создал свою собственную банку, и с POC вроде все в порядке. Постараюсь поднять пиар, чтоб другим было полезно :) - person Mahesh; 27.11.2019
comment
Если мой ответ касался вашего вопроса, отметьте его как верный, чтобы помочь другим пользователям, у которых в будущем может возникнуть этот же вопрос. Если нет, дайте мне знать, что не хватает. Спасибо! - person Justin Bertram; 27.11.2019