Hello.  I wanted to post a quick follow-up of my efforts to tune my app to
get better performance with a recipient list.  Previously, I was only able
to get 1,000,000 messages through my example in five minutes.  After some
playing around, I got all million messages completed in about 45 seconds!
I am routing through a Kafka broker, and my dynamic router EIP component
that is now utilizing a recipient list.  Here is what I did:

1. Create a custom pool the way the documentation suggests:

@Bean
public ExecutorService customPool() {
    DefaultThreadPoolFactory threadPoolFactory = new DefaultThreadPoolFactory();
    threadPoolFactory.setCamelContext(camelContext);
    DefaultExecutorServiceManager executorServiceManager = new
DefaultExecutorServiceManager(camelContext);
    executorServiceManager.setThreadPoolFactory(threadPoolFactory);
    return executorServiceManager.newCachedThreadPool(this,
"DynamicRouterSpringBootThreadFactory");
}


2. Utilizing better parallelism to generate and send messages:

Flux.range(1, limit)
        .flatMap(n -> Mono.just(n)
                .map(Object::toString)
                .subscribeOn(Schedulers.boundedElastic())
                .doOnNext(strN ->
producerTemplate.sendBodyAndHeaders("direct:command", strN,
                        Map.of("command", PROCESS_NUMBER_COMMAND,
"number", strN))))
        .subscribe();

I am much more satisfied with these results.  If any of you have other
suggestions that I should try, please let me know.  I will see how it
affects the results, and I will reply to the thread with whatever I find.

When this is all complete, I will submit my changes, which include a spring
boot examples project that demonstrates the dynamic router eip component
utilized in a more real-life scenario where messages are routed to multiple
(separate) JVMs, and stood up in a docker-compose stack where it can all be
controlled and monitored via swagger endpoints.

Thanks,
Steve

On Sat, Dec 16, 2023 at 12:21 PM Steve973 <steve...@gmail.com> wrote:

> Hello.  Are there examples somewhere that show how to make a recipient
> list as fast as possible?  I have already tried to provide different types
> of thread pools from the DefaultExecutorServiceManager.  If I am sending a
> lot of small messages, what options should I use to make the recipient list
> route as fast as possible?
>
>
>

Reply via email to