rebus-org / Rebus.RabbitMq

:bus: RabbitMQ transport for Rebus
https://mookid.dk/category/rebus
Other
63 stars 44 forks source link

suggested fix for "PRECONDITION_FAILED - invalid arg 'x-expires' for queue '...'… #48

Closed jarikp closed 5 years ago

jarikp commented 5 years ago

Hi,

Sorry, if you get a couple of other pull requests. My Git-client put wrong email adress into the commit and I was trying to correct that...

I get this error with the latest version of Rebus.RabbitMQ (5.1.0.0) from RabbitMq

"PRECONDITION_FAILED - invalid arg 'x-expires' for queue '…' in vhost '/': {value_zero,0}", classId=50, methodId=10, cause="

The error occurs when the bus is created using .InputQueueOptions() configurer, with SetAutoDelete(false). It seems that the config builder adds "x-expires" regardless of the auto-delete value, wich means "x-expires" has value 0 (the default of the ttlMs parameter) when auto-delete is false.

I suggest that "x-expires" is only included, if the autoDelete argument is true and the ttl is a positive number (exception otherwise, as before).

I was not sure how to fit proper unit tests for your project, but I have included some simple start up tests of the bus, that failed before this fix, and pass when the fix is included: Message: Rebus.Injection.ResolutionException : Could not resolve Rebus.Bus.IBus with decorator depth 0 - registrations: Rebus.Injection.Injectionist+Handler ----> Rebus.Exceptions.RebusApplicationException : Queue declaration for 'test_queue_1' failed ----> RabbitMQ.Client.Exceptions.OperationInterruptedException : The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=406, text="PRECONDITION_FAILED - invalid arg 'x-expires' for queue 'test_queue_1' in vhost '/': {value_zero,0}", classId=50, methodId=10, cause=

Please let me know, if this is a correct solution, thank you!

Best regards Jarik


Rebus is MIT-licensed. The code submitted in this pull request needs to carry the MIT license too. By leaving this text in, I hereby acknowledge that the code submitted in the pull request has the MIT license and can be merged with the Rebus codebase.

ronnyek commented 5 years ago

Apologies that I missed this stuff when originally committing this stuff. I could have sworn we did check for positive number.

jarikp commented 5 years ago

No problem, it was an easy fix :)