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 >> >