[ 
https://issues.apache.org/jira/browse/CAMEL-25888?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Federico Mariani reassigned CAMEL-25888:
----------------------------------------

    Assignee: Federico Mariani

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

Reply via email to