Outbox
This commit is contained in:
45
daemons/management/commands/outbox.py
Normal file
45
daemons/management/commands/outbox.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import datetime
|
||||
import json
|
||||
|
||||
import pika
|
||||
from django.db import transaction
|
||||
|
||||
from django.db.models import Q
|
||||
from django.utils import timezone
|
||||
|
||||
from Main.models.outbox_message import OutboxMessage
|
||||
from Sprint import settings
|
||||
from SprintLib.utils import LoopWorker
|
||||
|
||||
|
||||
class Command(LoopWorker):
|
||||
sleep_period = 0.1
|
||||
|
||||
def send_message(self, message):
|
||||
with pika.BlockingConnection(
|
||||
pika.ConnectionParameters(
|
||||
host=settings.RABBIT_HOST,
|
||||
port=settings.RABBIT_PORT,
|
||||
credentials=pika.PlainCredentials("guest", settings.RABBIT_PASSWORD),
|
||||
)
|
||||
) as connection:
|
||||
channel = connection.channel()
|
||||
channel.queue_declare(queue=message.queue)
|
||||
channel.basic_publish(
|
||||
exchange="",
|
||||
routing_key=message.queue,
|
||||
body=json.dumps({"id": message.id, "body": message.body}).encode("utf-8"),
|
||||
)
|
||||
|
||||
def go(self):
|
||||
messages = OutboxMessage.objects.filter(
|
||||
Q(time_sent__isnull=True) |
|
||||
Q(time_sent__lte=(timezone.now() - datetime.timedelta(minutes=5)), time_processed__isnull=True)
|
||||
).order_by(
|
||||
"time_created"
|
||||
)
|
||||
for message in messages:
|
||||
with transaction.atomic():
|
||||
message.time_sent = timezone.now()
|
||||
message.save()
|
||||
self.send_message(message)
|
@@ -6,6 +6,7 @@ from SprintLib.testers import *
|
||||
class Command(MessagingSupport):
|
||||
help = "Tests solution"
|
||||
queue_name = "test"
|
||||
with_transaction = False
|
||||
|
||||
def process(self, payload: dict):
|
||||
id = payload['id']
|
Reference in New Issue
Block a user