Claus,

I switched to using .withHeader() calls instead of .withProperty(), but I
am still not seeing my headers when I read the message from Pulsar.  How
does the Pulsar component attempt to keep track of the headers?


On Fri, Apr 14, 2023 at 10:47 AM Steve973 <steve...@gmail.com> wrote:

> Claus,
>
> Thanks for that.  I suppose I was a bit confused about the difference.  In
> 2012, you said (on SO):
>
>> One distinction not mentioned by Ben and Petter is that properties are
>> safely stored for the entire duration of the processing of the message in
>> Camel. In contrast, headers are part of the message protocol, and may not
>> be propagated during routing. For example, JMS has limitations on what
>> you can store as headers etc.
>
>
> On the same thread, I see Petter Nordlander claim:
>
>> Properties and headers are pretty much the same. Headers are, however,
>> converted to/from protocol specific headers on certain components, such as
>> Jms. So,
>>
>>    - Meta data inside a route: properties
>>    - Meta data to/from outside: headers
>>
>>
> Is this distinction because what happens with pulsar is technically
> "outside" of the Exchange itself?  So the specific protocols handle just
> what is supplied in the body and headers? And the headers have to get
> mapped to something in the specific protocols that are used, and then they
> will get mapped back into the message when read again by Camel when
> consuming from that protocol?
>
> Hopefully I'm not even more confused now! 😂
>
> On Fri, Apr 14, 2023 at 5:03 AM Claus Ibsen <claus.ib...@gmail.com> wrote:
>
>> Hi
>>
>> This is expected, exchange properties are local only to the current
>> Exchange.
>> If you send data over network protocols like pulsar, kafka, jms then
>> the payload is only from the message (eg body and headers)
>>
>>
>>
>> On Thu, Apr 13, 2023 at 11:24 PM Steve973 <steve...@gmail.com> wrote:
>>
>> > Hello.  I am sending an exchange with a FluentProducerTemplate to a
>> pulsar
>> > endpoint.  When a route reads from that endpoint, the exchange property
>> > that I set is no longer there.  This is how I am sending the message:
>> >
>> > Exchange exchange = ExchangeBuilder.anExchange(camelContext)
>> > .withProperty("command", MessageTypes.GENERATE_NUMBERS_COMMAND)
>> > .withBody(generateNumbersCommandMessage.toByteArray())
>> > .build();
>> > fluentProducerTemplate.withExchange(exchange)
>> > .to(commandUri)
>> > .send();
>> >
>> > I am reading from the same URI to feed a route where I log the exchange:
>> >
>> > from(mainRouterConfig.commandEntrypoint())
>> > .to("log:to.dynamic-router.command.route?showAll=true&multiline=true")
>> > .to("%s:%s?recipientMode=%s".formatted(
>> > COMPONENT_SCHEME, mainRouterConfig.routingChannel(), mainRouterConfig
>> > .recipientMode()));
>> >
>> > The exchange property is absent in the log message:
>> >
>> >   Id: 453CF424AB353C4-0000000000000000
>> >  ExchangePattern: InOnly
>> >  Properties:
>> >
>> >
>> {CamelToEndpoint=log://to.dynamic-router.command.route?multiline=true&showAll=true}
>> >
>> >  Headers: {CamelMessageTimestamp=1681420673229,
>> > CamelPulsarRedeliveryCount=0, event_time=0, key=null, key_bytes=null,
>> > message_id=0:0:-1, producer_name=standalone-0-11, properties={},
>> > publish_time=1681420673229
>> > , sequence_id=0,
>> > topic_name=non-persistent://public/default/numbers/command}
>> >  BodyType: byte[]
>> >  Body: generateNumberstypesequentialstart0limit1000000
>> >
>> > Am I doing anything obviously wrong?  Or is the Pulsar component eating
>> > exchange properties?
>> >
>> > Thanks,
>> > Steve
>> >
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2
>>
>

Reply via email to