-
Notifications
You must be signed in to change notification settings - Fork 0
/
rabbitmq.py
36 lines (26 loc) · 1.01 KB
/
rabbitmq.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from urllib.parse import parse_qs, urlencode, urlsplit
import pika
from django.conf import settings
global connected
connected = False
def publish(message, routing_key):
if not connected:
connect()
channel.basic_publish(
exchange=settings.RABBIT_EXCHANGE_NAME,
routing_key=settings.RABBIT_EXCHANGE_NAME + routing_key,
body=message,
properties=pika.BasicProperties(delivery_mode=2),
)
def connect():
parsed = urlsplit(settings.RABBIT_URL)
query = parse_qs(parsed.query)
# NOTE: Heartbeat should not be disabled.
# https://github.com/open-contracting/data-registry/issues/140
query.update({"blocked_connection_timeout": 1800, "heartbeat": 0})
connection = pika.BlockingConnection(pika.URLParameters(parsed._replace(query=urlencode(query)).geturl()))
global channel
channel = connection.channel()
channel.exchange_declare(exchange=settings.RABBIT_EXCHANGE_NAME, durable=True, exchange_type="direct")
global connected
connected = True