|
6 | 6 | import boto3 |
7 | 7 | from botocore.config import Config |
8 | 8 | from botocore.exceptions import ClientError |
| 9 | +import django.dispatch |
9 | 10 | from django.utils import timezone |
10 | 11 |
|
11 | 12 | from eb_sqs import settings |
|
16 | 17 |
|
17 | 18 | logger = logging.getLogger(__name__) |
18 | 19 |
|
| 20 | +MESSAGES_RECEIVED = django.dispatch.Signal(providing_args=['messages']) |
| 21 | +MESSAGES_PROCESSED = django.dispatch.Signal(providing_args=['messages']) |
| 22 | +MESSAGES_DELETED = django.dispatch.Signal(providing_args=['messages']) |
| 23 | + |
19 | 24 |
|
20 | 25 | class WorkerService(object): |
21 | 26 | _PREFIX_STR = 'prefix:' |
22 | | - |
23 | 27 | _RECEIVE_COUNT_ATTRIBUTE = 'ApproximateReceiveCount' |
24 | 28 |
|
25 | 29 | def process_queues(self, queue_names): |
@@ -70,16 +74,21 @@ def process_messages(self, queues, worker, static_queues): |
70 | 74 | messages = self.poll_messages(queue) |
71 | 75 | logger.debug('[django-eb-sqs] Polled {} messages'.format(len(messages))) |
72 | 76 |
|
73 | | - msg_entries = [] |
| 77 | + MESSAGES_RECEIVED.send(sender=self.__class__, messages=messages) |
74 | 78 |
|
| 79 | + msg_entries = [] |
75 | 80 | for msg in messages: |
76 | 81 | self.process_message(msg, worker) |
77 | 82 | msg_entries.append({ |
78 | 83 | 'Id': msg.message_id, |
79 | 84 | 'ReceiptHandle': msg.receipt_handle |
80 | 85 | }) |
81 | 86 |
|
| 87 | + MESSAGES_PROCESSED.send(sender=self.__class__, messages=messages) |
| 88 | + |
82 | 89 | self.delete_messages(queue, msg_entries) |
| 90 | + |
| 91 | + MESSAGES_DELETED.send(sender=self.__class__, messages=messages) |
83 | 92 | except ClientError as exc: |
84 | 93 | error_code = exc.response.get('Error', {}).get('Code', None) |
85 | 94 | if error_code == 'AWS.SimpleQueueService.NonExistentQueue' and queue not in static_queues: |
|
0 commit comments