jookies / jasmin

Jasmin - Open source SMS gateway
http://jasminsms.com
Other
1.02k stars 549 forks source link

Jasmin does not work with "durable" rabbit queues. #1011

Closed polyurethanegoose closed 1 year ago

polyurethanegoose commented 2 years ago

I've tried to verify whether Jasmin can work with Clustered RabbitMQ and it looks like it cannot. Creating a queue with type "Quorum" applies also a "feature = durable". Jasmin cannot connect to queues created with this arguments.

Log from main Jasmin process (strangely not from amqpp-client so issues with it are not raised to main process):

2021-09-30 XX:XX:XX ERROR    1   Cannot start deliverSmThrower: Method(name=close, id=40) (406, "PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'deliver_sm_thrower' in vhost '/': received 'false' but current is 'true'", 50, 10) content = None
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/txamqp/protocol.py", line 90, in invoke
    resp = (yield self.responses.get()).payload
  File "/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/local/lib/python3.9/site-packages/txamqp/queue.py", line 34, in _raise_if_closed
    raise Closed()
txamqp.queue.Closed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/jasmind.py", line 429, in start
    yield self.startdeliverSmThrowerService()
  File "/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py", line 1416, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/lib/python3.9/site-packages/twisted/python/failure.py", line 512, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/lib/python3.9/site-packages/jasmin/routing/throwers.py", line 172, in addAmqpBroker
    yield self.amqpBroker.named_queue_declare(queue=self.queueName)
  File "/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py", line 1416, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/lib/python3.9/site-packages/twisted/python/failure.py", line 512, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/lib/python3.9/site-packages/txamqp/protocol.py", line 102, in invoke
    self._raise_closed(self.reason)
  File "/usr/local/lib/python3.9/site-packages/txamqp/protocol.py", line 123, in _raise_closed
    raise ChannelClosed(reason)
txamqp.client.ChannelClosed: Method(name=close, id=40) (406, "PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'deliver_sm_thrower' in vhost '/': received 'false' but current is 'true'", 50, 10) content = None

2021-09-30 XX:XX:XX ERROR    1   Cannot start DLRThrower: Method(name=close, id=40) (406, "PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'deliver_sm_thrower' in vhost '/': received 'false' but current is 'true'", 50, 10) content = None
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/txamqp/protocol.py", line 90, in invoke
    resp = (yield self.responses.get()).payload
  File "/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/local/lib/python3.9/site-packages/txamqp/queue.py", line 34, in _raise_if_closed
    raise Closed()
txamqp.queue.Closed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/jasmind.py", line 429, in start
    yield self.startdeliverSmThrowerService()
  File "/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py", line 1416, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/lib/python3.9/site-packages/twisted/python/failure.py", line 512, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/lib/python3.9/site-packages/jasmin/routing/throwers.py", line 172, in addAmqpBroker
    yield self.amqpBroker.named_queue_declare(queue=self.queueName)
  File "/usr/local/lib/python3.9/site-packages/twisted/internet/defer.py", line 1416, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/lib/python3.9/site-packages/twisted/python/failure.py", line 512, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/lib/python3.9/site-packages/txamqp/protocol.py", line 102, in invoke
    self._raise_closed(self.reason)
  File "/usr/local/lib/python3.9/site-packages/txamqp/protocol.py", line 123, in _raise_closed
    raise ChannelClosed(reason)
txamqp.client.ChannelClosed: Method(name=close, id=40) (406, "PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'deliver_sm_thrower' in vhost '/': received 'false' but current is 'true'", 50, 10) content = None

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/jasmind.py", line 439, in start
    yield self.startDLRThrowerService()
txamqp.client.ChannelClosed: Method(name=close, id=40) (406, "PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'deliver_sm_thrower' in vhost '/': received 'false' but current is 'true'", 50, 10) content = None

Steps to reproduce:

  1. Install Jasmin with RabbiMQ
  2. Start full stack once (Jasmin creates queues)
  3. Stop Jasmin.
  4. Log-in into RabbitMQ management panel, remove eg. "dlr_thrower" queue.
  5. Create it again but this time not as "classic" but as s "quorum" type. This applies two features.
  6. Start Jasmin again.
github-actions[bot] commented 1 year ago

Stale issue detected, remove stale label or comment or this will be closed soon.

github-actions[bot] commented 1 year ago

This issue was closed because it has been stalled more than a year with no activity.

marcinkowalczyk commented 9 months ago

@polyurethanegoose did you mange to move forward somehow? It's quite sad that exchanges and queues are transient as in case of rabbit restart all data is gone