Hello guys,

We are using camel with multiple contexts that normally didn't communicate
directly between themselves. But recently we had to add such possibility
and used direct-vm for that. As we do not want to lose any of the exchanges
during communication, on the producer side of direct-vm we set *block*
property to *true* and add timeout of 10 minutes(for the case when the
context with consumer will be reloaded or down for some time). That part is
working fine.
But there is a problem with the response in our case. In each exchange that
is being generated across the system, in the properties section we store
some information that is required for logging. But in case of direct-vm
call, on the consumer side, a new exchange will be generated(and that is
perfectly fine as it is separate context), and upon response original
exchange(the one that was used by producer) will receive all the properties
from the other exchange (that was processed by another context). And it
breaks our logging functionality in this case.
As per documentation for direct-vm there is also the property called
*propagateProperties
*and upon setting it to *false* it shouldn't copy properties section upon
sending request/response.
[image: image.png]
And it would have resolved our case perfectly, but looks like it is not
working when *block* property set to *true*. As per piece of code in
camel(In DirectVmEndpoint class):
[image: image.png]
There are two types of producers. And it looks like
DirectVmBlockingProducer *ignores *propagateProperties property of the
endpoint, while DirectVmProducer is working just fine with it. But as I
described earlier we need this blocking behavior in order to fail an
exchange if no one is ready to pick it up.
Testing configuration looks like that:
*Producer*
<toD
uri="direct-vm:veryUniqueDirectVmName?block=true&failIfNoConsumers=false&timeout=60000&propagateProperties=false"/>
*Consumer*
direct-vm:veryUniqueDirectVmName?propagateProperties=false

So, could someone please clarify following questions:

   1. Is this true that for direct-vm endpoints we cannot use *block=true*
   and *propagateProperties=false* combined or I did something incorrect in
   the configuration? Or maybe this is a bug?
   2. if true, than is there any other way to send something from one
   context to another and meets following expectations:


   - Producer will fail if there are no consumers in other contexts after
      some configurable timeout
      - Ignore properties of the request/response exchange(or at least
      response)

If there is any other information required from me, please specify and I
will gladly add it.
Thanks in advance!

Best regards,
Viktor Kiricheiko

Reply via email to