这是跟进问题 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 ---- ");
}
}
这里的问题是,即使所有数据都已发送到下一个路由之后,使用者路由仍停留在线程中。逻辑流程将使使用者关闭。我该如何处理?
在处理完所有数据之后,如何使使用者停止使用。有什么直接的方法可以阻止消费者?并且停止使用方是否会停止从该使用方连接的所有后续路由?当前,有关自定义组件的文档非常抽象,对此将提供任何帮助。