Пример #1
0
    def _put(self, queue, message, **kwargs):
        """Put message onto queue."""
        q_url = self._new_queue(queue)
        kwargs = {'QueueUrl': q_url,
                  'MessageBody': AsyncMessage().encode(dumps(message))}
        if queue.endswith('.fifo'):
            if 'MessageGroupId' in message['properties']:
                kwargs['MessageGroupId'] = \
                    message['properties']['MessageGroupId']
            else:
                kwargs['MessageGroupId'] = 'default'
            if 'MessageDeduplicationId' in message['properties']:
                kwargs['MessageDeduplicationId'] = \
                    message['properties']['MessageDeduplicationId']
            else:
                kwargs['MessageDeduplicationId'] = str(uuid.uuid4())

        c = self.sqs(queue=self.canonical_queue_name(queue))
        if message.get('redelivered'):
            c.change_message_visibility(
                QueueUrl=q_url,
                ReceiptHandle=message['properties']['delivery_tag'],
                VisibilityTimeout=0
            )
        else:
            c.send_message(**kwargs)
Пример #2
0
 def _put(self, queue, message, **kwargs):
     """Put message onto queue."""
     q_url = self._new_queue(queue)
     access_key = self.conninfo.userid
     secret_key = self.conninfo.password
     sle = SQSLibExtended(access_key, secret_key, DEFULT_AWS_REGION,
                          DEFULT_BUCKET_NAME)
     body_data = json.loads(base64.b64decode(message["body"]))
     body_data[0] = json.loads(sle.get_message(json.dumps(body_data[0])))
     message["body"] = body_data
     message["body"] = base64.b64encode(json.dumps(message["body"]))
     kwargs = {
         'QueueUrl': q_url,
         'MessageBody': AsyncMessage().encode(dumps(message))
     }
     if queue.endswith('.fifo'):
         if 'MessageGroupId' in message['properties']:
             kwargs['MessageGroupId'] = \
                 message['properties']['MessageGroupId']
         else:
             kwargs['MessageGroupId'] = 'default'
         if 'MessageDeduplicationId' in message['properties']:
             kwargs['MessageDeduplicationId'] = \
                 message['properties']['MessageDeduplicationId']
         else:
             kwargs['MessageDeduplicationId'] = str(uuid.uuid4())
     self.sqs.send_message(**kwargs)
Пример #3
0
    def _put(self, queue, message, **kwargs):
        """Put message onto queue."""
        q_url = self._new_queue(queue)
        kwargs = {
            "QueueUrl": q_url,
            "MessageBody": AsyncMessage().encode(dumps(message)),
        }
        if queue.endswith(".fifo"):
            if "MessageGroupId" in message["properties"]:
                kwargs["MessageGroupId"] = message["properties"]["MessageGroupId"]
            else:
                kwargs["MessageGroupId"] = "default"
            if "MessageDeduplicationId" in message["properties"]:
                kwargs["MessageDeduplicationId"] = message["properties"][
                    "MessageDeduplicationId"
                ]
            else:
                kwargs["MessageDeduplicationId"] = str(uuid.uuid4())

        c = self.sqs(queue=self.canonical_queue_name(queue))
        if message.get("redelivered"):
            c.change_message_visibility(
                QueueUrl=q_url,
                ReceiptHandle=message["properties"]["delivery_tag"],
                VisibilityTimeout=0,
            )
        else:
            c.send_message(**kwargs)
Пример #4
0
 def _get(self, queue):
     """Try to retrieve a single message off ``queue``."""
     q_url = self._new_queue(queue)
     resp = self.sqs(queue=queue).receive_message(
         QueueUrl=q_url, MaxNumberOfMessages=1,
         WaitTimeSeconds=self.wait_time_seconds)
     if resp.get('Messages'):
         body = AsyncMessage(body=resp['Messages'][0]['Body']).decode()
         resp['Messages'][0]['Body'] = body
         return self._messages_to_python(resp['Messages'], queue)[0]
     raise Empty()
Пример #5
0
    def _get_bulk(self,
                  queue,
                  max_if_unlimited=SQS_MAX_MESSAGES,
                  callback=None):
        """Try to retrieve multiple messages off ``queue``.

        Where :meth:`_get` returns a single Payload object, this method
        returns a list of Payload objects.  The number of objects returned
        is determined by the total number of messages available in the queue
        and the number of messages the QoS object allows (based on the
        prefetch_count).

        Note:
            Ignores QoS limits so caller is responsible for checking
            that we are allowed to consume at least one message from the
            queue.  get_bulk will then ask QoS for an estimate of
            the number of extra messages that we can consume.

        Arguments:
            queue (str): The queue name to pull from.

        Returns:
            List[Message]
        """
        # drain_events calls `can_consume` first, consuming
        # a token, so we know that we are allowed to consume at least
        # one message.

        # Note: ignoring max_messages for SQS with boto3
        max_count = self._get_message_estimate()
        if max_count:
            q_url = self._new_queue(queue)
            resp = self.sqs(queue=queue).receive_message(
                QueueUrl=q_url,
                MaxNumberOfMessages=max_count,
                WaitTimeSeconds=self.wait_time_seconds)
            if resp.get('Messages'):
                for m in resp['Messages']:
                    m['Body'] = AsyncMessage(body=m['Body']).decode()
                for msg in self._messages_to_python(resp['Messages'], queue):
                    self.connection._deliver(msg, queue)
                return
        raise Empty()
Пример #6
0
 def _put(self, queue, message, **kwargs):
     """Put message onto queue."""
     q_url = self._new_queue(queue)
     kwargs = {
         'QueueUrl': q_url,
         'MessageBody': AsyncMessage().encode(dumps(message))
     }
     if queue.endswith('.fifo'):
         if 'MessageGroupId' in message['properties']:
             kwargs['MessageGroupId'] = \
                 message['properties']['MessageGroupId']
         else:
             kwargs['MessageGroupId'] = 'default'
         if 'MessageDeduplicationId' in message['properties']:
             kwargs['MessageDeduplicationId'] = \
                 message['properties']['MessageDeduplicationId']
         else:
             kwargs['MessageDeduplicationId'] = str(uuid.uuid4())
     self.sqs.send_message(**kwargs)