Apache camel 驼峰过滤器-使用代理调用不同的bean

Apache camel 驼峰过滤器-使用代理调用不同的bean,apache-camel,Apache Camel,我试图根据bean输入调用不同的服务。但是我的实例服务没有被调用。请查找以下代码: 我的路线 from("jms:queue:instance").filter() .method(instanceTypeFilter, "isMCUInstance") .to("instanceservice").filter() .method(instanceTypeFilter, "isDMAInstance")

我试图根据bean输入调用不同的服务。但是我的实例服务没有被调用。请查找以下代码:

我的路线

    from("jms:queue:instance").filter()
            .method(instanceTypeFilter, "isMCUInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isDMAInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isWSPInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isMEAInstance")
            .to("instanceservice").filter()
            .method(instanceTypeFilter, "isRSSInstance")
            .to("instanceservice");
下面的方法调用正在被调用

public class InstanceTypeFilter {
public boolean isMCUInstance(Instance instance) {
    System.out.println("Entering : InstanceTypeFilter : isMCUInstance");
    System.out.println("instance.getType() : " + instance.getType());
    return instance.getType() == "MCU";


 ......................

}
   Service(value = "instanceservice")
   public class InstanceServiceImpl implements InstanceService {

public Instance add(final Instance instance) {
    System.out.println("Entering : InstanceServiceImpl : add");
    instance.setId("newId");
    instance.setName("newName");
    instance.setType("newType");
    System.out.println("Exiting : InstanceServiceImpl : add");
    return instance;
}

}
但是下面的代码没有被调用

public class InstanceTypeFilter {
public boolean isMCUInstance(Instance instance) {
    System.out.println("Entering : InstanceTypeFilter : isMCUInstance");
    System.out.println("instance.getType() : " + instance.getType());
    return instance.getType() == "MCU";


 ......................

}
   Service(value = "instanceservice")
   public class InstanceServiceImpl implements InstanceService {

public Instance add(final Instance instance) {
    System.out.println("Entering : InstanceServiceImpl : add");
    instance.setId("newId");
    instance.setName("newName");
    instance.setType("newType");
    System.out.println("Exiting : InstanceServiceImpl : add");
    return instance;
}

}
我是Camel的大赢家,据我所知,add方法应该得到执行。我使用带有springremoting的代理来调用add方法

我尝试了以下方法,但问题仍然存在

  .when(method(InstanceTypeFilter.class, "isMCUInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isDMAInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isWSPInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isMEAInstance")
                    .isEqualTo(true))
            .to("instanceservice")
            .when(method(InstanceTypeFilter.class, "isRSSInstance")
                    .isEqualTo(true)).to("instanceservice");

您应该使用基于内容的路由器,而不是过滤器eip

此处列出了EIP及其示例

你要找的EIP在这里


基于内容的路由器就像一个if。。否则。。否则如果。。。任何编程语言中的else控件结构。

而不是
.to(“instanceservice”)
尝试使用
.to(“bean:instanceservice?method=add”)
.beanRef(“instanceservice”,“add”)

它不会被调用,因为你的过滤器正在过滤掉它!这就是过滤器的设计目的。克劳斯的回答描述了如何使用
choice()
when()
<代码>结束()。