使用Camel Endpoint DSL与@EndpointInject创建不同的端点。

问题描述 投票:0回答:1

使用端点DSL,然后用ProducerTemplate引用端点的正确方法是什么?当创建路由并使用端点DSL时,Camel似乎为端点创建了一个不同的uri。我的EndpointRouteBuilder类。

@Component
public class MyRoutes extends EndpointRouteBuilder {

    @Override
    public void configure() throws Exception {
        from(seda("STATUS_ENDPOINT"))
        .routeId("stateChangeRoute")
        .to(activemq("topic:statusTopic"))
    }
}

然后把端点注入到ProducerTemplate中去

@Component
public class StateChangePublisher {

    @EndpointInject(value="seda:STATUS_ENDPOINT")
    private ProducerTemplate producer;

    public void publish(String str) {
        try {
            producer.sendBody(str);
        } catch(CamelExecutionException e) {
            e.printStackTrace();
        }
    }
}

当camel启动时,我在日志中看到两个条目。

o.a.camel.component.seda.SedaEndpoint    : Endpoint seda:STATUS_ENDPOINT is using shared queue: seda:STATUS_ENDPOINT with size: 1000
o.a.camel.component.seda.SedaEndpoint    : Endpoint seda://STATUS_ENDPOINT is using shared queue: seda://STATUS_ENDPOINT with size: 1000

队列最终被填满,没有任何东西被送到 "to "端点。 如果我定义路由而不使用端点DSL方法 "seda()"

from("seda:STATUS_ENDPOINT")

那么它的工作.这是一个错误或我做错了什么?我使用的是camel 3.2.0和

apache-camel spring-camel
1个回答
1
投票

这是端点dsl中的一个bug。尝试升级到camel 3.3.0。我想在新版本中已经修复了这个问题。

https:/issues.apache.orgjirabrowseCAMEL-14859

© www.soinside.com 2019 - 2024. All rights reserved.