Skip to content
Snippets Groups Projects
Commit a718a934 authored by Alberto LIVIO BECCARIA's avatar Alberto LIVIO BECCARIA
Browse files

Aggiunto servizio RabbitMQ Client

parent 7f5bf304
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3
import pika
import dbus
from random import randint
from time import sleep
server_host = 'rabbitmq.edu-al.unipmn.it';
server_port = 5672;
server_username = 'labmanager-client';
server_pwd = '3aB7=2zV9:1jN3-4hE2';
server_vhost = 'labmanager';
exchange_name = 'labmanager-test';
exchange_type = 'x-recent-history'; # It's a plugin. Enable with 'rabbitmq-plugins enable rabbitmq_recent_history_exchange'
systemd_getconfig_unit_name = 'esame-get-config.service'
bus = dbus.SystemBus()
systemd = bus.get_object(
'org.freedesktop.systemd1',
'/org/freedesktop/systemd1'
)
manager = dbus.Interface(
systemd,
'org.freedesktop.systemd1.Manager'
)
server_credentials = pika.PlainCredentials(server_username, server_pwd, True)
while True:
try:
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host=server_host,
port=server_port,
virtual_host=server_vhost,
credentials=server_credentials
)
)
channel = connection.channel()
'''
L'exchange lo dichiara il publisher
TODO: qui serve sapere se esiste gia' e in caso negativo aspettare e ripetere (valutare se usare passive=true)
'''
# channel.exchange_declare(exchange=exchange_name, exchange_type=exchange_type)
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange=exchange_name, queue=queue_name)
print('Waiting for RabbitMQ messages')
def callback(ch, method, properties, body):
# Sleep a random number of seconds (between 1 and 10)
# to avoid all machines reboot at the same time
sleep(randint(1,10))
print("RabbitMQ message: %s" % body.decode('UTF-8'))
start_unit = manager.StartUnit(systemd_getconfig_unit_name, 'fail')
channel.basic_consume(
queue=queue_name, on_message_callback=callback, auto_ack=True)
channel.start_consuming()
except pika.exceptions.ConnectionClosedByBroker:
break
# Don't recover on channel errors
except pika.exceptions.AMQPChannelError:
break
# Recover on all other connection errors
except pika.exceptions.AMQPConnectionError:
continue
[Unit]
Description=Esame - RabbitMQ client
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /usr/libexec/labmanager/rabbitmq/rabbitmq-client.py
[Install]
WantedBy=esame.target esamekiosk.target esameshow.target graphical.target
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment