自定义骆驼组件-如何停止

时间:2020-09-16 04:58:03

标签: java apache-camel spring-camel

这是跟进问题 Asynchronous Camel Component - doStop() called immediately

我认为内部有一个执行服务可以帮助我解决用例。现在,我有一个这样的消费者,

public class MyComponentConsumer extends DefaultConsumer {

    private ExecutorService executorService;

    public MyComponentConsumer(MyComponentEndpoint endpoint, Processor processor) {
        super(endpoint, processor);
    }

    @Override
    protected void doStart() throws Exception {
        super.doStart();

        executorService = getEndpoint().getCamelContext().getExecutorServiceManager().newSingleThreadExecutor(this, endpoint.getEndpointUri());
        executorService.execute(new Runnable() {
        public void run() {
            flag = true;
            while ( flag ) {
                //external API call
                Resource resource = getNextResource();
                if ( resource.next() == null ) {
                    flag = false;
                }
                Exchange ex = endpoint.createExchange(ExchangePattern.InOnly);
                ex.getIn().setBody(resource.toString());
                getAsyncProcessor().process(
                                ex
                                doneSync -> {
                                    LOG.info("Message processed");
                                }
                        );
            }
        }
    }

    @Override
    protected void doStop() throws Exception {
        super.doStop();
        System.out.println("stop ---- ");
    }
}

这里的问题是,即使所有数据都已发送到下一个路由之后,使用者路由仍停留在线程中。逻辑流程将使使用者关闭。我该如何处理?

在处理完所有数据之后,如何使使用者停止使用。有什么直接的方法可以阻止消费者?并且停止使用方是否会停止从该使用方连接的所有后续路由?当前,有关自定义组件的文档非常抽象,对此将提供任何帮助。

0 个答案:

没有答案