From 8ca0aac2dcfb25542b84060f16f5385dd39083a0 Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Mon, 12 Jun 2017 07:45:17 +0200 Subject: [PATCH] make it easier to configure dispatcher for Camel ProducerChild, #23099 * and use parent dispatcher as default, better than default-dispatcher (cherry picked from commit c911c06b9e60b88874cf9b608c64aa5a125e9794) --- akka-camel/src/main/resources/reference.conf | 9 +++++++++ akka-camel/src/main/scala/akka/camel/Camel.scala | 2 ++ akka-camel/src/main/scala/akka/camel/Producer.scala | 6 +++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/akka-camel/src/main/resources/reference.conf b/akka-camel/src/main/resources/reference.conf index 89cf9c78b8..13dabc2ab8 100644 --- a/akka-camel/src/main/resources/reference.conf +++ b/akka-camel/src/main/resources/reference.conf @@ -32,6 +32,15 @@ akka { # The duration of time to await activation of an endpoint. activation-timeout = 10s } + + producer { + # The id of the dispatcher to use for producer child actors, i.e. the actor that + # interacts with the Camel endpoint. Some endpoints may be blocking and then it + # can be good to define a dedicated dispatcher. + # If not defined the producer child actor is using the same dispatcher as the + # parent producer actor. + use-dispatcher = "" + } #Scheme to FQCN mappings for CamelMessage body conversions conversions { diff --git a/akka-camel/src/main/scala/akka/camel/Camel.scala b/akka-camel/src/main/scala/akka/camel/Camel.scala index f16b400cd7..f1ba3aed3a 100644 --- a/akka-camel/src/main/scala/akka/camel/Camel.scala +++ b/akka-camel/src/main/scala/akka/camel/Camel.scala @@ -87,6 +87,8 @@ class CamelSettings private[camel] (config: Config, dynamicAccess: DynamicAccess */ final val StreamingCache: Boolean = config.getBoolean("akka.camel.streamingCache") + final val ProducerChildDispatcher: String = config.getString("akka.camel.producer.use-dispatcher") + final val Conversions: (String, RouteDefinition) ⇒ RouteDefinition = { val specifiedConversions = { import scala.collection.JavaConverters.asScalaSetConverter diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index 4f96958d9a..019d6b0dc4 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -59,7 +59,11 @@ trait ProducerSupport extends Actor with CamelSupport { protected def produce: Receive = { case CamelProducerObjects(endpoint, processor) ⇒ if (producerChild.isEmpty) { - producerChild = Some(context.actorOf(Props(new ProducerChild(endpoint, processor)))) + val disp = camel.settings.ProducerChildDispatcher match { + case "" ⇒ context.props.dispatcher + case d ⇒ d + } + producerChild = Some(context.actorOf(Props(new ProducerChild(endpoint, processor)).withDispatcher(disp))) messages = { for ( child ← producerChild;