繁体   English   中英

RabbitMQ骆驼

[英]RabbitMQ with Camel

我正在使用Java DSL在Camel中为Rabbit MQ写一个简单的示例。

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://localhost/logs?exchangeType=fanout

wonhee的建议应该可以解决您的问题。 解释如下:

根据RabbitMQ组件文档 ,正确的URL格式为:

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

没有exchange选项,但是交换名称直接是路径的一部分。

ExchangeName不是一个选项,它是URI路径的一部分。 我将更新RabbitMQComponent代码,为其抛出更有意义的异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM