payment finished
This commit is contained in:
48
payment/rabbitmq.py
Normal file
48
payment/rabbitmq.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import json
|
||||
import pika
|
||||
|
||||
class Publisher:
|
||||
HOST = 'rabbitmq'
|
||||
VIRTUAL_HOST = '/'
|
||||
EXCHANGE='robot-shop'
|
||||
TYPE='direct'
|
||||
ROUTING_KEY = 'orders'
|
||||
|
||||
def __init__(self, logger):
|
||||
self._logger = logger
|
||||
self._params = pika.connection.ConnectionParameters(
|
||||
host=self.HOST,
|
||||
virtual_host=self.VIRTUAL_HOST,
|
||||
credentials=pika.credentials.PlainCredentials('guest', 'guest'))
|
||||
self._conn = None
|
||||
self._channel = None
|
||||
|
||||
def _connect(self):
|
||||
if not self._conn or self._conn.is_closed:
|
||||
self._conn = pika.BlockingConnection(self._params)
|
||||
self._channel = self._conn.channel()
|
||||
self._channel.exchange_declare(exchange=self.EXCHANGE, exchange_type=self.TYPE)
|
||||
self._logger.info('connected to broker')
|
||||
|
||||
def _publish(self, msg):
|
||||
self._channel.basic_publish(exchange=self.EXCHANGE,
|
||||
routing_key=self.ROUTING_KEY,
|
||||
body=json.dumps(msg).encode())
|
||||
self._logger.info('message sent')
|
||||
|
||||
#Publish msg, reconnecting if necessary.
|
||||
def publish(self, msg):
|
||||
if self._channel is None:
|
||||
self._connect()
|
||||
try:
|
||||
self._publish(msg)
|
||||
except pika.exceptions.ConnectionClosed:
|
||||
self._logger.info('reconnecting to queue')
|
||||
self._connect()
|
||||
self._publish(msg)
|
||||
|
||||
def close(self):
|
||||
if self._conn and self._conn.is_open:
|
||||
self._logger.info('closing queue connection')
|
||||
self._conn.close()
|
||||
|
Reference in New Issue
Block a user