我有方法,不时生成一个字符串.我想将方法注册为uri并生成一个交换方法,该方法将用作路由的输入.
该方法由另一个类调用
SampleClass sc = new SampleClass();
sc.sampleMethod("Hello");
Run Code Online (Sandbox Code Playgroud)
例如:
public class SampleClass{
@Produce(uri = "direct:consumerMethod")
ProducerTemplate producer;
public sampleMethod(Object obj){
producer.sendBody(object);
}
}
Run Code Online (Sandbox Code Playgroud)
路线定义如下:
@Override
public void configure() {
from("direct:consumerMethod").process(new GenerateD());
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用sampleMethod生成时,路径不会调用GenerateD类.这不可行还是我做错了什么?
最后,这对我的用例有用。
启动camelcontext如下:
CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new SampleRoute());
camelContext.start();
Run Code Online (Sandbox Code Playgroud)
我的路线构建者课程:
class SampleRoute extends RouteBuilder {
@Override
public void configure() {
try
{
from("direct:consumerMethod").process(new DDT());
}catch(Exception e)
{
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建一个具有 sendMessage 方法的接口。
public interface DDTConsumer {
public String sendMessage(Object object);
}
Run Code Online (Sandbox Code Playgroud)
现在我实现这个方法来创建这个接口的端点并向该端点发送消息。
DDTConsumer ddt;
try {
ddt = new ProxyBuilder(camelContext).endpoint("direct:consumerMethod").build(DDTConsumer.class);
ddt.sendMessage(msg.getValue());
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题,路线现在工作正常。希望它也能帮助其他人。