Reconnect to the AMQP bus when the connection breaks down
This commit is contained in:
parent
5f228dc046
commit
2ff8ed76d0
@ -2,36 +2,51 @@
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import pika
|
import pika
|
||||||
|
import random
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
MY_TASKS_DIR = Path(__file__).parent / "tasks"
|
MY_TASKS_DIR = Path(__file__).parent / "tasks"
|
||||||
|
|
||||||
connection = pika.BlockingConnection(pika.URLParameters("amqps://opensuse:opensuse@rabbit.opensuse.org"))
|
def listen_events():
|
||||||
channel = connection.channel()
|
connection = pika.BlockingConnection(pika.URLParameters("amqps://opensuse:opensuse@rabbit.opensuse.org"))
|
||||||
|
channel = connection.channel()
|
||||||
|
|
||||||
channel.exchange_declare(exchange='pubsub', exchange_type='topic', passive=True, durable=True)
|
channel.exchange_declare(exchange='pubsub', exchange_type='topic', passive=True, durable=False)
|
||||||
|
|
||||||
result = channel.queue_declare("", exclusive=True)
|
result = channel.queue_declare("", exclusive=True)
|
||||||
queue_name = result.method.queue
|
queue_name = result.method.queue
|
||||||
|
|
||||||
channel.queue_bind(exchange='pubsub',
|
channel.queue_bind(exchange='pubsub',
|
||||||
queue=queue_name,routing_key='#')
|
queue=queue_name,routing_key='opensuse.obs.package.commit')
|
||||||
|
|
||||||
print(' [*] Waiting for logs. To exit press CTRL+C')
|
print(' [*] Waiting for logs. To exit press CTRL+C')
|
||||||
|
|
||||||
def callback(ch, method, properties, body):
|
def callback(ch, method, properties, body):
|
||||||
if method.routing_key not in ("opensuse.obs.package.commit",):
|
if method.routing_key not in ("opensuse.obs.package.commit",):
|
||||||
return
|
|
||||||
body = json.loads(body)
|
|
||||||
if 'project' in body and 'package' in body and body['project'] == 'openSUSE:Factory':
|
|
||||||
if '/' in body['package']:
|
|
||||||
return
|
return
|
||||||
|
body = json.loads(body)
|
||||||
|
if 'project' in body and 'package' in body and body['project'] == 'openSUSE:Factory':
|
||||||
|
if '/' in body['package']:
|
||||||
|
return
|
||||||
|
|
||||||
(MY_TASKS_DIR / body['package']).touch()
|
(MY_TASKS_DIR / body['package']).touch()
|
||||||
print(" [x] %r:%r" % (method.routing_key, body['package']))
|
print(" [x] %r:%r" % (method.routing_key, body['package']))
|
||||||
|
|
||||||
channel.basic_consume(queue_name,
|
channel.basic_consume(queue_name,
|
||||||
callback,
|
callback,
|
||||||
auto_ack=True)
|
auto_ack=True)
|
||||||
|
|
||||||
channel.start_consuming()
|
channel.start_consuming()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
listen_events();
|
||||||
|
except pika.exceptions.ConnectionClosed:
|
||||||
|
time.sleep(random.randint(10,100))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user