Example #1
0
    def handle_delivery(self, channel, method, header, body):
        """Handle delivery from WFE."""
        LOG.debug("Method: %r" % method)
        LOG.debug("Header: %r" % header)
        LOG.debug("Body: %r" % body)
        settings = dict(self.config.items(SECTION_TASKQUEUE))

        try:
            workitem = get_workitem(
                header, body, settings.get('workitem_type_map', None),
                settings.get('default_workitem_type', DEFAULT_CONTENT_TYPE))
        except WorkitemError as err:
            # Report error and accept message
            LOG.error("%s" % err)
            channel.basic_ack(method.delivery_tag)
            return

        worker = workitem.worker_type
        channel.basic_publish(exchange='',
                              routing_key='worker_%s' % worker,
                              body=body,
                              properties=pika.BasicProperties(
                                  delivery_mode=2,
                                  content_type=header.content_type))

        channel.basic_ack(method.delivery_tag)
Example #2
0
    def handle_delivery(self, channel, method, header, body):
        """Handle delivery from WFE."""
        LOG.debug("Method: %r" % method)
        LOG.debug("Header: %r" % header)
        LOG.debug("Body: %r" % body)
        settings = dict(self.config.items(SECTION_TASKQUEUE))

        try:
            workitem = get_workitem(header, body,
                                    settings.get('workitem_type_map', None),
                                    settings.get('default_workitem_type',
                                                 DEFAULT_CONTENT_TYPE))
        except WorkitemError as err:
            # Report error and accept message
            LOG.error("%s" % err)
            channel.basic_ack(method.delivery_tag)
            return

        worker = workitem.worker_type
        channel.basic_publish(exchange='',
                              routing_key='worker_%s' % worker,
                              body=body,
                              properties=pika.BasicProperties(
                                  delivery_mode=2,
                                  content_type=header.content_type
                              ))

        channel.basic_ack(method.delivery_tag)
Example #3
0
    def handle_delivery(self, channel, method, header, body):
        """Handle AMQP message.

        :param channel: AMQP channel
        :type channel: pika.channel.Channel
        :param method: message's method
        :type method: pika.frame.Method
        :param header: message header
        :type header: pika.frame.Header
        :param body: message body
        :type body: string
        """

        LOG.debug("Method: %r" % method)
        LOG.debug("Header: %r" % header)
        try:
            workitem = get_workitem(header, body,
                                    self.settings.get('workitem_type_map',
                                                      None),
                                    self.settings.get('default_workitem_type',
                                                      DEFAULT_CONTENT_TYPE))
        except WorkitemError as err:
            LOG.error("Worker %s.%s can't handle delivery with header '%r' "
                      "and body:\n%s" % (self.__module__,
                                         self.__class__.__name__,
                                         header, body))
            channel.basic_ack(method.delivery_tag)
            return False
        wi_out = workitem
        if self.is_acceptable(workitem):
            try:
                wi_out = self.handle_task(workitem)
            except Exception as err:
                wi_out.set_error(str(err))
                wi_out.set_trace(traceback.format_exc())
        else:
            wi_out.set_error("Worker doesn't support this type of workitems")
        self.report_results(channel, wi_out)
        channel.basic_ack(method.delivery_tag)
        return True
Example #4
0
    def handle_delivery(self, channel, method, header, body):
        """Handle AMQP message.

        :param channel: AMQP channel
        :type channel: pika.channel.Channel
        :param method: message's method
        :type method: pika.frame.Method
        :param header: message header
        :type header: pika.frame.Header
        :param body: message body
        :type body: string
        """

        LOG.debug("Method: %r" % method)
        LOG.debug("Header: %r" % header)
        try:
            workitem = get_workitem(
                header, body, self.settings.get('workitem_type_map', None),
                self.settings.get('default_workitem_type',
                                  DEFAULT_CONTENT_TYPE))
        except WorkitemError as err:
            LOG.error("Worker %s.%s can't handle delivery with header '%r' "
                      "and body:\n%s" %
                      (self.__module__, self.__class__.__name__, header, body))
            channel.basic_ack(method.delivery_tag)
            return False
        wi_out = workitem
        if self.is_acceptable(workitem):
            try:
                wi_out = self.handle_task(workitem)
            except Exception as err:
                wi_out.set_error(str(err))
                wi_out.set_trace(traceback.format_exc())
        else:
            wi_out.set_error("Worker doesn't support this type of workitems")
        self.report_results(channel, wi_out)
        channel.basic_ack(method.delivery_tag)
        return True