Hello. Today, I tried to send messages in parallel inside of my
component. It worked fine in my tests where I just used a few messages and
a few destinations. But in my spring boot example, where I have several
destinations, and a million messages, it broke -- fast! Here is a portion
of my stack trace:
Caused by: java.lang.NullPointerException: null
at
org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:206)
~[camel-base-engine-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.impl.engine.SharedCamelInternalProcessor$1.process(SharedCamelInternalProcessor.java:111)
~[camel-base-engine-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
~[camel-base-engine-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:108)
~[camel-base-engine-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.support.cache.DefaultProducerCache.send(DefaultProducerCache.java:199)
~[camel-support-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:176)
~[camel-base-engine-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:148)
~[camel-base-engine-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:131)
~[camel-base-engine-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.component.dynamicrouter.DynamicRouterProcessor.lambda$createFilter$1(DynamicRouterProcessor.java:152)
~[camel-dynamic-router-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:66)
~[camel-support-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
at
org.apache.camel.processor.FilterProcessor.process(FilterProcessor.java:81)
~[camel-core-processor-3.15.0-SNAPSHOT.jar:3.15.0-SNAPSHOT]
So, how does the MulticastProcessor get around this type of issue? What is
the proper way to parallelize work within Camel? I tried using a parallel
stream, as well as completable futures. I even tried to instantiate a
MulticastProcessor, but I wasn't configuring it correctly. The performance
isn't too bad when I just use a non-parallel stream, but I would prefer to
multicast, if possible.
Thanks,
Steve