使用endpointUri的DirectConsumerNotAvailableException

时间:2015-10-15 05:00:48

标签: apache-camel

  

org.apache.camel.component.direct.DirectConsumerNotAvailableException:   端点上没有可用的消费者:端点[direct:// start]

当我尝试以下代码时,我收到错误。

public static void main(String args[]) throws Exception {
    CamelContext context = new DefaultCamelContext();
    ProducerTemplate template = context.createProducerTemplate();
    ConsumerTemplate consumer = context.createConsumerTemplate();
    consumer.start();
    String response = IOUtils.toString(new FileInputStream(args[0]));
    template.sendBody("direct:start", response);
    Exchange out = consumer.receive("direct:start");
    Thread.sleep(10000);
    consumer.stop();
}

但是按照以下方式工作

    public static void main(String args[]) throws Exception {
    CamelContext context = new DefaultCamelContext();
    final DataFormat dataFormat = new BindyCsvDataFormat(TTlabsResponse.class);

    RouteBuilder rb = new RouteBuilder() {
        public void configure() {
            from("file://src/test/resources?noop=true&fileName=tsv.txt")
            .unmarshal(dataFormat).process(new SimpleProcessor());
        }
    };
    context.addRoutes(rb);
    context.start();
    Thread.sleep(10000);
    context.stop();
}

1 个答案:

答案 0 :(得分:1)

在第一个中,您没有从direct:start端点消耗的路由以及当您尝试将消息发送到没有消费者的direct端点时出现错误的原因。

直接端点就像直接方法调用,需要消费者。

您可以发送使用队列的seda来解耦生产者和消费者。

详见