camel中自动生成routeId

zd287kbt  于 2023-03-29  发布在  Apache
关注(0)|答案(3)|浏览(176)

在apache-camel中,是否有一种方法可以自动生成routeId,并覆盖现有的路由号(在RouteDefinitionHelper中生成)?

7kjnsjlb

7kjnsjlb1#

据我所知,你可以使用routeNaming上没有autoGeneration策略,但你可以做类似的事情:

private String myURI;

from("jms:queue:" + myURI).routeId("JmsComponent:" + myURI)
    .to("....");

通过使用blueprint或spring将变量注入到java类中,您可以更改URI,它将相应地调整路由名称。您也可以在私有变量中使用完整的URI,然后自己解析endpointURI并将其格式化为routeId。

cl25kdpy

cl25kdpy2#

您可以直接为路由以及路由中的处理器指定它们。

from("direct:start").routeId("MyMainRoute")
    .to("direct:out").id("MyOutputProcessor");

这些id将在jConsole中可见,因此您也可以查看路由和处理器的统计信息。

mpgws1up

mpgws1up3#

对于spring-camel,您可以使用以下代码:

@Component
public class UriNodeIdFactory extends DefaultNodeIdFactory {
@Override
public String createId(NamedNode def) {
    String key = def instanceof NamedRoute nr ? nr.getEndpointUrl()
       : def instanceof EndpointRequiredDefinition ed ? ed.getEndpointUri()
       : def.getShortName();
    if (key.contains("{{") && def instanceof OptionalIdentifiedDefinition od && od.getCamelContext() != null) {
        key = od.getCamelContext().resolvePropertyPlaceholders(key);
    }
    return key.replace(":", "-").replace(".", "_") + getNodeCounter(key).incrementAndGet();
}
}

相关问题