我正在尝试使用camel proxy和Java Interface调用直接端点。我将此接口作为OSGI服务公开给另一个bundle并访问该bundle中的接口。一切都运行良好,现在我需要根据相同的驼峰上下文中使用相同界面的某些条件调用另一个直接端点。我怎么能这样做?
Camel routes:
<camelContext id="cContext" trace="false" xmlns="http://camel.apache.org/schema/blueprint">
<proxy id="camelProxyService"
serviceInterface="com.xxx.CamelProxyService"
serviceUrl="direct:endpoint1" />
<route id="route1">
<from uri="direct:endpoint1" />
<to uri="seda:a" />
</route>
<route id="route2">
<from uri="direct:endpoint2" />
<to uri="seda:b" />
</route>
</camelContext>
<service ref="camelProxyService" interface="com.xxx.CamelProxyService"/>
public interface CamelProxyService {
public void method1(String str);
public void method2(String str);
}
How can i define the interface as camel proxy in camel context and mention method names to call different direct endpoints? Any help is appreciated.
答案 0 :(得分:1)
<proxy id="camelProxyService"
serviceInterface="com.uday.camel.proxy.CamelProxyService"
serviceUrl="direct:endpoint1" />
<camel:route>
<camel:from uri="direct:endpoint1"/>
<camel:process ref="conditionProcess"/>
<camel:choice>
<camel:when>
<camel:header>${condition}=method1</camel:header>
<camel:to uri="seda:a"/>
</camel:when>
<camel:otherwise>
<camel:to uri="seda:b"/>
</camel:otherwise>
</camel:choice>
<camel:stop/>
</camel:route>
public class ConditionProcess实现Processor {
@Override
public void process(Exchange exchange) throws Exception {
BeanInvocation invocation = exchange.getIn().getBody(BeanInvocation.class);
String methodName = invocation.getMethod().getName();
exchange.getIn().setHeader("condition", methodName);
System.out.println("Method "+methodName);
}
}