[
https://issues.apache.org/jira/browse/CAMEL-25888?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18130590#comment-18130590
]
Claus Ibsen commented on CAMEL-25888:
-------------------------------------
Backport to camel-4.18.x merged via https://github.com/apache/camel/pull/28278
(commit eb38a4686093). The camel-4.22.x backport
(https://github.com/apache/camel/pull/28277) is still open.
> camel-pubnub - the producer should not use the consumer's channel header
> ------------------------------------------------------------------------
>
> Key: CAMEL-25888
> URL: https://issues.apache.org/jira/browse/CAMEL-25888
> Project: Camel
> Issue Type: Bug
> Components: camel-pubnub
> Reporter: Federico Mariani
> Assignee: Federico Mariani
> Priority: Major
> Fix For: 4.18.6, 4.22.3, 4.24.0
>
>
> h3. Current behaviour
> The PubNub consumer sets the {{CamelPubNubChannel}} header
> ({{PubNubConstants.CHANNEL}}) to the channel each received message or
> presence event arrived on ({{PubNubConsumer}}). The same header is also read
> by the producer: {{PubNubProducer.getChannel()}} prefers
> {{CamelPubNubChannel}} over the {{channel}} configured on the endpoint, for
> every operation (publish, fire, getHistory, getState, setState, hereNow), and
> there is no option to turn this off.
> As a result, a route that consumes from one PubNub endpoint and sends to a
> second PubNub endpoint does not use the second endpoint's configured channel.
> The exchange still carries the consumer's {{CamelPubNubChannel}} header, so
> the producer sends to the channel the message was received on. With a
> wildcard ({{foo.*}}) or a comma-separated channel list on the consumer, the
> channel used by the producer changes from message to message.
> {code:java}
> from("pubnub:inbound.*?subscribeKey=...")
> .to("pubnub:outbound?publishKey=...&subscribeKey=...");
> // today the message is published to the channel it was received on (e.g.
> inbound.a),
> // not to "outbound"
> {code}
> The consumer header is metadata about where a message came from; it should
> not decide where a downstream producer sends it. Other components keep these
> two concerns apart (for example camel-kafka's {{kafka.TOPIC}} /
> {{kafka.OVERRIDE_TOPIC}}).
> h3. Expected behaviour
> * The producer uses the channel configured on its endpoint.
> * A new producer header, {{CamelPubNubOverrideChannel}}
> ({{PubNubConstants.OVERRIDE_CHANNEL}}), lets a route choose a different
> channel explicitly.
> * The consumer keeps setting {{CamelPubNubChannel}} as before.
> h3. Proposed change
> * {{PubNubConstants}}: keep {{CHANNEL}} ({{CamelPubNubChannel}}) as consumer
> metadata; add {{OVERRIDE_CHANNEL = "CamelPubNubOverrideChannel"}} with
> {{@Metadata(label = "producer", description = "The channel to use instead of
> the channel configured on the endpoint.")}}.
> * {{PubNubProducer.getChannel()}}: read only {{CamelPubNubOverrideChannel}},
> falling back to {{PubNubConfiguration.getChannel()}}; it no longer reads
> {{CamelPubNubChannel}}.
> * Regenerate {{pubnub.json}}, the catalog and the endpoint DSL header
> constants.
> * Upgrade guide: routes that set {{CamelPubNubChannel}} to pick the
> producer's channel must use {{CamelPubNubOverrideChannel}} instead (4.24, and
> the 4.22.3 and 4.18.6 entries).
> h3. Tests
> * {{PubNubPublishTest}}: an exchange carrying {{CamelPubNubChannel}} is
> published to the endpoint's configured channel;
> {{CamelPubNubOverrideChannel}} selects the channel when set.
> * A consumer-to-producer route test: a message received on one channel and
> forwarded to a second pubnub endpoint is published to that endpoint's
> configured channel.
> * Existing consumer assertions on {{CamelPubNubChannel}}
> ({{PubNubSubscriberTest}}, {{PubNubPresenceTest}}) stay unchanged.
> The behaviour dates back to the first version of the component and is the
> same on main, camel-4.22.x and camel-4.18.x.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)