cloudamqp / amqproxy

An intelligent AMQP proxy, with connection and channel pooling/reusing
https://www.cloudamqp.com
MIT License
342 stars 50 forks source link

When the publisher confirmation mechanism is enabled, the channel is forcibly closed. #124

Closed Z-Sai closed 7 months ago

Z-Sai commented 1 year ago

When the publisher confirmation mechanism is enabled, the channel is forcibly closed, but the connection remains online normally. If the publisher confirmation mechanism is not enabled, everything returns to normal. The AMQProxy version is 0.8.8, and the PHP AMQP component is: "php amqplib/php amqplib": "^ 3.5". But I think this should be when AMQProxy decides to close the channel, as my application directly connects to the proxy.

image

Of course, I have also thought of deliberately designing this because when a channel is placed in the channel pool maintained by AMQProxy after enabling the publisher confirmation mechanism, it may be reused by other applications that have not enabled the publisher confirmation mechanism, which can lead to unpredictable errors. I am not sure if this is what I thought.

dentarg commented 10 months ago

@Z-Sai do you have some code to share that reproduces the problem? also, can you see if you still have problems with amqproxy v0.8.14?

carlhoerberg commented 7 months ago

Correct, when the client closes a channel with publish confirm on we can't reuse it, as acks/nacks from the server might still not have been delivered, instead being sent to another client that reuses the channel and won't expected them. The delivery_tag in the ack/nack frame will also be out of sync of the new client.

Z-Sai commented 7 months ago

Correct, when the client closes a channel with publish confirm on we can't reuse it, as acks/nacks from the server might still not have been delivered, instead being sent to another client that reuses the channel and won't expected them. The delivery_tag in the ack/nack frame will also be out of sync of the new client.

Thanks for the reply, it's exactly what I expected.