Replies: 3 comments 12 replies
-
While RabbitMQ JMS selector plugin could handle such cases, I don't see how it would be meaningfully different from a case where one client deletes an exchange another one is concurrently publishing to. Since publishing to a non-existent exchange is a protocol error We don't have any code that can be used to reproduce but the only scenario I can think of when This is discussion material in its current state. |
Beta Was this translation helpful? Give feedback.
-
Thanks! - Agreed publishing to a non-existent exchange would be a channel-level error, but in this case the client publishing is being done to the jms.durable.topic exchange - which is durable and does exist. Since the exchange being published to exists, shouldn't the publishing client be allowed to continue without error/disconnect? It is the x-jms-topic exchange (bound to the jms.durable.topic published to) used to create a custom message selector being destroyed when client B leaves which is causing the channel disconnect on the publish to jms.durable.topic for client A. Maybe I'm missunerstanding intent, but this seems like it would be the standard use case for the x-jms-topic exchange. The (java JMS in this case, but seems irrelevant) client subscribes to a topic. If it subscribes to the topic wide-open, the client library just creates a queue bound to the primary jms.durable.topic others will publish to, using the routing key. If a message selector is provided for the subscription, a x-jms-topic exchange is bound in between the subscriber's queue and the jms.durable.topic to apply the message filtering.
|
Beta Was this translation helpful? Give feedback.
-
@TomGood75 Thanks for the sample project, I managed to reproduce. @michaelklishin My understanding is that the JMS topic exchange is deleted but some messages still manage to get in, translating to a call to So we're indeed in a case where the consumer affects the publisher, which should not happen. There's no way here to make the difference between some invalid routing (no mnesia record for this consumer) and a legit race condition when the exchange is deleted. I don't know why the topic does not return I don't know the impacts it would have, but I'd vote to return |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Good afternoon!
2022-04-22 15:59:20.025335+00:00 [erro] <0.28247.50> Error on AMQP connection <0.28247.50> (172.17.14.169:56946 -> 172.16.1.71:5672 - testcon, vhost: 'test', user: 'lme', state: running), channel 1:
2022-04-22 15:59:20.025335+00:00 [erro] <0.28247.50> operation basic.publish caused a connection exception internal_error: "exchange named 'jms-ndtop-slx-5e26b4e1-ed59-47fa-ba8f-502a245b6430' has no saved state or incorrect saved state"
2022-04-22 15:59:20.029623+00:00 [info] <0.28777.50> closing AMQP connection <0.28777.50> (172.17.14.169:56969 -> 172.16.1.71:5672 - testcon, vhost: 'test', user: 'lme')
2022-04-22 15:59:20.034313+00:00 [info] <0.28247.50> closing AMQP connection <0.28247.50> (172.17.14.169:56946 -> 172.16.1.71:5672 - testcon, vhost: 'test', user: 'lme')
I'm not sure what the best way to handle this is - and am hoping some of the amazing people who maintain will. At least to me, it seems a failure to access/read-lock an exchange to process a message through it should not result in the publishing client being disconnected - especially when in this case it is due to the exchange being destroyed from another client disconnecting.
Just let me know if you'd like any additional info. Since this only happened sporadically in production, I wrote an (ugly) test case to pin down where the issue was, which led me here once I could reproduce this action of one client with a message-selector exchange subscription disconnecting causing another (completely separate JVM client in this case) publishing to be disconnected.
Thanks in advance for any attention you can give this issue!
Beta Was this translation helpful? Give feedback.
All reactions