我有方法,不时生成一个字符串。我想将方法注册为uri并生成一个交换方法,该方法将用作路径的输入。
该方法由另一个类
调用SampleClass sc = new SampleClass();
sc.sampleMethod("Hello");
例如:
public class SampleClass{
@Produce(uri = "direct:consumerMethod")
ProducerTemplate producer;
public sampleMethod(Object obj){
producer.sendBody(object);
}
}
路线定义如下:
@Override
public void configure() {
from("direct:consumerMethod").process(new GenerateD());
}
但是当我使用sampleMethod生成时,路径不会调用GenerateD类。这不可行还是我做错了什么?
答案 0 :(得分:1)
最后这对我的用例有用。
启动camelcontext如下:
CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new SampleRoute());
camelContext.start();
我的路线建造者课程:
class SampleRoute extends RouteBuilder {
@Override
public void configure() {
try
{
from("direct:consumerMethod").process(new DDT());
}catch(Exception e)
{
e.printStackTrace();
}
}
}
然后我创建了一个具有sendMessage方法的接口。
public interface DDTConsumer {
public String sendMessage(Object object);
}
现在我实现此方法来创建此接口的端点并向端点发送消息。
DDTConsumer ddt;
try {
ddt = new ProxyBuilder(camelContext).endpoint("direct:consumerMethod").build(DDTConsumer.class);
ddt.sendMessage(msg.getValue());
} catch (Exception e) {
e.printStackTrace();
}
这解决了我的问题,现在路线工作正常。希望它也有助于其他人。
答案 1 :(得分:0)
在您的班级sampleMethod(Object)
添加以下字段:
@Produce(uri = "direct:consumerMethod")
ProducerTemplate template;
在您的sampleMethod(Object)
中,您可以使用之前添加的template
,如下所示:
public sampleMethod(Object obj){
template.sendBody(object);
}
它应该向direct:consumerMethod
路径发送消息。
答案 2 :(得分:0)
使用类似的东西,如果你想调用某种方法
@Override
public void configure() {
from("direct:consumerMethod").log(simple("${bean:generateD?method=generateDMethod}"));
}
上面的表达式将调用generateDMethod
对象(bean)的generateD
并将方法输出记录到控制台(默认日志编写器)。
要使上面的表达式起作用,您必须在注册表中存储generateD
bean,它将进一步与您的应用程序的CamelContext相关联。您可以执行以下操作
@Autowired
private GenerateD generateD;
@Override
protected CamelContext createCamelContext() throws Exception {
SimpleRegistry registry = new SimpleRegistry();
registry.put("generateD", generateD); //the generateD bean,which can be used anywhere in the camelcontext
SpringCamelContext camelContext = new SpringCamelContext();
camelContext.setRegistry(registry); //add the registry
camelContext.setApplicationContext(getApplicationContext());
camelContext.start();
return camelContext;
}
这会将bean添加到camelContext。请在此link查看我的回答,以获得完整的示例。