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

问题描述

这是跟进问题 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 ---- ");
    }
}

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)