Claus Ibsen created CAMEL-26016:
-----------------------------------

             Summary: camel-nats - a consumer reply that does not convert to 
bytes is dropped, and JetStream replies go to the ack subject
                 Key: CAMEL-26016
                 URL: https://issues.apache.org/jira/browse/CAMEL-26016
             Project: Camel
          Issue Type: Bug
          Components: camel-nats
    Affects Versions: 4.18.0, 4.22.0, 4.23.0
            Reporter: Claus Ibsen
             Fix For: 4.24.0


Found while checking the body types of the nats component for the catalog 
(CAMEL-24961).

h4. 1. A consumer reply that does not convert to bytes is dropped silently

A nats consumer with {{exchangePattern=InOut}} answers a message that has a 
reply subject with the body the route ends with, converted with 
{{getBody(byte[].class)}}, and publishes it only when that is not null 
({{NatsConsumer}}, main 56aa5f4970a6, lines 391-398). A body that does not 
convert to bytes, such as a Map, a POJO or no body, sends no reply and logs 
nothing, so the requester times out with no hint. (The producer sends the same 
bodies as their toString().)

Checked on 4.24.0-SNAPSHOT with {{camel run}} against {{camel infra run nats}}: 
services that end with text, bytes or a stream reply; services that end with a 
Map, a POJO or no body do not reply, and the request fails 
({{CancellationException: Future cancelled, response not registered in time}}).

*Proposed change*: fail the exchange, or log a warning, when the reply body 
does not convert to bytes.

h4. 2. A JetStream consumer with exchangePattern=InOut publishes its reply to 
the ack subject

With JetStream, the reply subject of a delivered message is its ack subject, 
{{$JS.ACK...}}. A nats consumer with {{jetstreamEnabled=true}} and 
{{exchangePattern=InOut}} takes it as the reply subject, and after the message 
is acked it publishes the body the route ends with to the ack subject 
({{NatsConsumer}}, main 56aa5f4970a6, lines 391-398).

Checked on 4.24.0-SNAPSHOT with {{camel run}} against {{camel infra run nats}} 
(JetStream on): a consumer on {{orders}} with {{jetstreamName=ORDERS}}, 
{{durableName=c1}} and {{exchangePattern=InOut}} whose route ends with 
"reply-body", and a core subscription on {{$JS.ACK.>}}: it receives "+ACK" and 
then "reply-body" on the same ack subject.

*Proposed change*: do not reply to a JetStream message, or say in the docs that 
InOut is for core NATS only.

_Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to