RabbitMQ с верблюдом

1

Я пишу простой пример в Camel для Rabbit MQ с использованием Java DSL.

CamelContext context = new DefaultCamelContext();

        context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("rabbitmq://localhost?exchange=logs&exchangeType=fanout")
                    .to("stream:out");
            }
        });

        context.start();

Этот пример должен читать сообщения и печатать их.

Но я получаю следующую ошибку:

Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route(route1)[[From[rabbitmq://localhost?exchange=logs&excha... because of Failed to resolve endpoint: rabbitmq://localhost?exchange=logs&exchangeType=fanout due to: String index out of range: -1
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:180)
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:778)
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:2041)
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1791)
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1665)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1633)
    at com.test.app.App.initCamelContext(App.java:29)
    at com.test.app.App.main(App.java:15)
Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: rabbitmq://localhost?exchange=logs&exchangeType=fanout due to: String index out of range: -1
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:532)
    at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:71)
    at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:190)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:106)
    at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112)
    at org.apache.camel.model.FromDefinition.resolveEndpoint(FromDefinition.java:72)
    at org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:88)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:888)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:175)
    ... 8 more
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1937)
    at java.lang.String.substring(String.java:1904)
    at org.apache.camel.component.rabbitmq.RabbitMQComponent.createEndpoint(RabbitMQComponent.java:45)
    at org.apache.camel.component.rabbitmq.RabbitMQComponent.createEndpoint(RabbitMQComponent.java:27)
    at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:123)
    at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:512)
    ... 16 more

Следующий мой pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-core</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-rabbitmq</artifactId>
    <version>2.13.0</version>       
</dependency>
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-stream</artifactId>
    <version>2.13.0</version>
</dependency>

Может кто-нибудь, пожалуйста, помогите мне разобраться в недостающей части?

Теги:
rabbitmq
apache-camel

3 ответа

1
Лучший ответ

Вероятно, вам нужно попробовать что-то вроде

rabbitmq://localhost/logs?exchangeType=fanout
  • 0
    Спасибо. Это сработало.
0

Имя ExchangeName не является вариантом, это часть пути URI. Я обновляю код RabbitMQComponent, создавая для него более значимое исключение.

0

ничто не поможет исправить вашу проблему. Здесь объяснение:

Согласно документации компонента RabbitMQ, правильный формат URL:

rabbitmq://hostname[:port]/exchangeName?[options]

Там нет опции exchange, а скорее имя обмена является непосредственно частью пути.

  • 0
    Спасибо Антон.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню