当前位置: 首页 > 知识库问答 >
问题:

阿帕奇骆驼:Weave在Split中不工作。为什么?

别峻
2023-03-14

我在Spring中有以下XML DSL上下文定义:

<beans>
    <camelContext>
        <route>
            <from uri="direct:foo"/>
            <split parallelProcessing="true">
                <simple>${body}</simple>
                <to uri="direct:bar"/>
            </split>
        </route>
    </camelContext>
</beans>

在我的测试中,我试图编织<code>direct:bar</code>endpoint,如下所示:

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

    @Override
    public void configure() throws Exception {
        weaveByToString(".*direct:bar.*").replace().to("mock:bar");
    }
});

这成功工作。但是当路由启动时,会抛出一个异常,说org.apache.camel.NoSuchBeanExc的注册表中找不到bean:直接: bar

为什么?

可能是骆驼不支持编织里面分裂?

注意:使用下面的XML一切都很好:

<beans>
    <camelContext>
        <route>
            <from uri="direct:dummy"/>
            <to uri="direct:bar"/>
        </route>

        <route>
            <from uri="direct:foo"/>
            <split parallelProcessing="true">
                <simple>${body}</simple>
                <to uri="direct:dummy"/>
            </split>
        </route>
    </camelContext>
</beans>

共有1个答案

张嘉熙
2023-03-14

我无法使用使用 Camel 2.7 描述的用例重现您的错误。这是我通过的测试:

@Test
public void test() throws Exception {

    context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

        @Override
        public void configure() throws Exception {
            weaveByToString(".*direct:bar.*").replace().to("mock:bar");
        }
    });

    MockEndpoint mock = getMockEndpoint("mock:bar");
    mock.expectedMessageCount(1);

    template.sendBody("direct:foo", "this is a test");

    assertMockEndpointsSatisfied();
}

使用 camel:run 启动路由时,也会在不抛出 NoSuchBeanException 的情况下启动。

 类似资料:
  • 我试图使用Apache Camel Quartz2实现一个调度器,它每分钟执行一次路由,并按预期执行一些任务。我使用spring DSL实现与apache camel相关联的路由,如下所示: 根据日志,它不会记录为路由记录的消息,例如Direct:DomainsWithFTPUsers等等。请指导如何实现同样的目标。

  • 遵循官方文件(https://camel.apache.org/manual/component-dsl.html#_using_component_dsl)我创建了以下代码: 但是中的告诉我: 并且中的特性不建议导入相应的库。 有人能给我指出正确的方向吗? 我必须理解的概念才能做到这一点吗?

  • 考虑到apache Camel,我有一个问题:是否可以通过代码来创建全局拦截器,例如AOP?拦截器应该跳过endpoint还是模仿endpoint? 提前致谢

  • 我们需要的是直接的API来设置和使用集群消息队列。我们最初的计划是使用Camel在集群JMS或ActiveMQ队列上进行消费/生产。Kafka如何使这项任务变得更容易?在任何一种情况下,应用程序本身都将在WebLogic服务器上运行。 消息传递将是点对点类型,其中有多个相同服务的实例在运行,但根据负载平衡策略,只有一个实例应该处理消息并发出结果。消息队列也是群集的,因此服务实例或队列实例的失败都不

  • 我对骆驼生产商有很好的了解,但我不能对各种骆驼消费者保持清醒的头脑。特别是事件驱动消费者和轮询消费者,camel如何知道为这些消费者调用回调? 消费者的一般流量是多少?

  • 我在projet中使用ApacheCamel,我想使用Product注释发送文件中的对象。首先,可能吗?有更好的办法吗? 其次,我尝试了这个代码片段: 当我调用发布方法时,生产者不是注入(null)。有人有主意吗?提前谢谢。