在camel路由中使用方法作为生产者

Ama*_*ddy 5 java apache-camel

我有方法,不时生成一个字符串.我想将方法​​注册为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类.这不可行还是我做错了什么?

Ama*_*ddy 1

最后,这对我的用例有用。

启动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)

这解决了我的问题,路线现在工作正常。希望它也能帮助其他人。