Karaf camel:route-list 仅显示蓝图路线,不显示 Java 路线
Karaf camel:route-list shows only Blueprint routes, not Java routes
我正忙于与 Camel 和 Karaf 打交道。我用两个包构建了一个项目:
- Bundle A 包含 Blueprint Camel 路线
- Bundle B 包含一条纯 Java 路线
我遵循了 Jamie Goodyear 的 Karaf 食谱中的说明
两条路线都非常简单,我使用功能文件部署它们。他们部署得非常完美,而且 运行 完全按照计划进行:
Bundle A 将文件从 /tmp/in
移动到 /tmp/out
Bundle B 将文件从 /tmp/in2
移动到 tmp/out2
一切顺利。
但是,如果我 运行 Karaf 命令 camel:route-list
则只显示蓝图路由
此外,如果我 运行 camel:context-list
则仅显示 Bundle A 中定义的上下文。
重申一下,两条路线都可以正常工作,只是 Java 路线没有出现在列表中。
我是不是遗漏了什么?
这是我的 Java 路线:
public class FileRouter extends RouteBuilder {
public void configure()
{
from ("file:/tmp/in2?noop=true")
.log("Java DSL doing the heavy lifting")
.to("file:/tmp/out2");
}
}
以及捆绑激活器:
public class Activator implements BundleActivator {
DefaultCamelContext camelContext;
public void start(BundleContext context) {
System.out.println("Starting the bundle");
camelContext = new DefaultCamelContext();
try {
camelContext.setName("JavaDSLContext");
camelContext.addRoutes(new FileRouter());
camelContext.start();
} catch (Exception ex) {
System.out.println("Exception occured! " + ex.getMessage());
}
}
public void stop(BundleContext context) {
System.out.println("Stopping the bundle");
if (camelContext != null) {
try {
camelContext.stop();
} catch (Exception ex) {
System.out.println("Exception occured during stop context.");
}
}
}
}
Tx Souciance Eqdam Rashti。我今天早上浏览了您的博客,了解您将蓝图与 JavaDSL.
结合使用是什么意思
很有魅力。
为了完整起见,这里是更改:
我的 Java 路线 class 与问题中指定的完全相同,但我完全放弃了 Activator,用蓝图文件替换它。
蓝图如下所示:
<bean id="FileRouter" class="com.eightbitplatoon.learning.karaf.karafbasics.combined.FileRouter">
</bean>
<camelContext id="karafbasics-combined" xmlns="http://camel.apache.org/schema/blueprint">
<routeBuilder ref="FileRouter" />
</camelContext>
谢谢帮助!
感谢 Claus - 我已经完成了 Camel-SCR 上的 material,并最终使这种方法也能发挥作用。我的想法是 Camel-SCR 可能是更干净的解决方案,因为它可以很容易地将属性传递给 JavaDSL 路由器。
为了完整起见,这是我的最终解决方案,然后我将结束这个问题:
文件路由器现在看起来像这样:
public class ScrFileRouter extends RouteBuilder {
// Configured fields
private String camelRouteId;
@Override
public void configure() throws Exception {
// Add a bean to Camel context registry
AbstractCamelRunner.getRegistry(getContext(), SimpleRegistry.class).put("testString", "this is a test");
from("file:/tmp/in6?noop=true").routeId(camelRouteId)
.to("file:/tmp/out6");
}
}
基于 SCR 的 Camel runner 如下所示:
@Component(label = ScrRunner.COMPONENT_LABEL, description = ScrRunner.COMPONENT_DESCRIPTION, immediate = true, metatype = true)
@Properties({
@Property(name = "camelContextId", value = "scr-runner"),
@Property(name = "camelRouteId", value = "scr-file-router"),
@Property(name = "active", value = "true"),
})
@References({
@Reference(name = "camelComponent",referenceInterface = ComponentResolver.class,
cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, policy = ReferencePolicy.DYNAMIC,
policyOption = ReferencePolicyOption.GREEDY, bind = "gotCamelComponent", unbind = "lostCamelComponent")
})
public class ScrRunner extends AbstractCamelRunner {
public static final String COMPONENT_LABEL = "ScrRunner";
public static final String COMPONENT_DESCRIPTION = "This is the description for ScrRunner";
@Override
protected List<RoutesBuilder> getRouteBuilders() {
List<RoutesBuilder> routesBuilders = new ArrayList<>();
routesBuilders.add(new ScrFileRouter());
return routesBuilders;
}
@Override
protected void setupCamelContext(BundleContext bundleContext, String camelContextId)throws Exception{
super.setupCamelContext(bundleContext, camelContextId);
// Use MDC logging
getContext().setUseMDCLogging(true);
// Use breadcrumb logging
getContext().setUseBreadcrumb(true);
}
}
我密切关注 Camel SCR 网站上的信息,几乎一切正常。然后我使用了建议的原型 (camel-archetype-scr),效果很好。
所以最后我还不得不对我的 POM 文件进行一些更改(实际上只是使用 Archetype 提供的 POM。)
感谢大家的帮助。我想我现在可以得到一些牵引力了。
干杯!
我正忙于与 Camel 和 Karaf 打交道。我用两个包构建了一个项目:
- Bundle A 包含 Blueprint Camel 路线
- Bundle B 包含一条纯 Java 路线
我遵循了 Jamie Goodyear 的 Karaf 食谱中的说明
两条路线都非常简单,我使用功能文件部署它们。他们部署得非常完美,而且 运行 完全按照计划进行:
Bundle A 将文件从 /tmp/in
移动到 /tmp/out
Bundle B 将文件从 /tmp/in2
移动到 tmp/out2
一切顺利。
但是,如果我 运行 Karaf 命令 camel:route-list
则只显示蓝图路由
此外,如果我 运行 camel:context-list
则仅显示 Bundle A 中定义的上下文。
重申一下,两条路线都可以正常工作,只是 Java 路线没有出现在列表中。
我是不是遗漏了什么?
这是我的 Java 路线:
public class FileRouter extends RouteBuilder {
public void configure()
{
from ("file:/tmp/in2?noop=true")
.log("Java DSL doing the heavy lifting")
.to("file:/tmp/out2");
}
}
以及捆绑激活器:
public class Activator implements BundleActivator {
DefaultCamelContext camelContext;
public void start(BundleContext context) {
System.out.println("Starting the bundle");
camelContext = new DefaultCamelContext();
try {
camelContext.setName("JavaDSLContext");
camelContext.addRoutes(new FileRouter());
camelContext.start();
} catch (Exception ex) {
System.out.println("Exception occured! " + ex.getMessage());
}
}
public void stop(BundleContext context) {
System.out.println("Stopping the bundle");
if (camelContext != null) {
try {
camelContext.stop();
} catch (Exception ex) {
System.out.println("Exception occured during stop context.");
}
}
}
}
Tx Souciance Eqdam Rashti。我今天早上浏览了您的博客,了解您将蓝图与 JavaDSL.
结合使用是什么意思很有魅力。
为了完整起见,这里是更改:
我的 Java 路线 class 与问题中指定的完全相同,但我完全放弃了 Activator,用蓝图文件替换它。
蓝图如下所示:
<bean id="FileRouter" class="com.eightbitplatoon.learning.karaf.karafbasics.combined.FileRouter">
</bean>
<camelContext id="karafbasics-combined" xmlns="http://camel.apache.org/schema/blueprint">
<routeBuilder ref="FileRouter" />
</camelContext>
谢谢帮助!
感谢 Claus - 我已经完成了 Camel-SCR 上的 material,并最终使这种方法也能发挥作用。我的想法是 Camel-SCR 可能是更干净的解决方案,因为它可以很容易地将属性传递给 JavaDSL 路由器。
为了完整起见,这是我的最终解决方案,然后我将结束这个问题: 文件路由器现在看起来像这样:
public class ScrFileRouter extends RouteBuilder {
// Configured fields
private String camelRouteId;
@Override
public void configure() throws Exception {
// Add a bean to Camel context registry
AbstractCamelRunner.getRegistry(getContext(), SimpleRegistry.class).put("testString", "this is a test");
from("file:/tmp/in6?noop=true").routeId(camelRouteId)
.to("file:/tmp/out6");
}
}
基于 SCR 的 Camel runner 如下所示:
@Component(label = ScrRunner.COMPONENT_LABEL, description = ScrRunner.COMPONENT_DESCRIPTION, immediate = true, metatype = true)
@Properties({
@Property(name = "camelContextId", value = "scr-runner"),
@Property(name = "camelRouteId", value = "scr-file-router"),
@Property(name = "active", value = "true"),
})
@References({
@Reference(name = "camelComponent",referenceInterface = ComponentResolver.class,
cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, policy = ReferencePolicy.DYNAMIC,
policyOption = ReferencePolicyOption.GREEDY, bind = "gotCamelComponent", unbind = "lostCamelComponent")
})
public class ScrRunner extends AbstractCamelRunner {
public static final String COMPONENT_LABEL = "ScrRunner";
public static final String COMPONENT_DESCRIPTION = "This is the description for ScrRunner";
@Override
protected List<RoutesBuilder> getRouteBuilders() {
List<RoutesBuilder> routesBuilders = new ArrayList<>();
routesBuilders.add(new ScrFileRouter());
return routesBuilders;
}
@Override
protected void setupCamelContext(BundleContext bundleContext, String camelContextId)throws Exception{
super.setupCamelContext(bundleContext, camelContextId);
// Use MDC logging
getContext().setUseMDCLogging(true);
// Use breadcrumb logging
getContext().setUseBreadcrumb(true);
}
}
我密切关注 Camel SCR 网站上的信息,几乎一切正常。然后我使用了建议的原型 (camel-archetype-scr),效果很好。
所以最后我还不得不对我的 POM 文件进行一些更改(实际上只是使用 Archetype 提供的 POM。)
感谢大家的帮助。我想我现在可以得到一些牵引力了。
干杯!