在驼峰路线中使用方法作为生产者

时间:2017-08-18 15:11:57

标签: java apache-camel

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

3 个答案:

答案 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查看我的回答,以获得完整的示例。