nameko.messaging¶
提供核心消息装饰器和依赖项提供者。
Attributes¶
Exceptions¶
Common base class for all non-exit exceptions. |
Classes¶
请注意,Extension.__init__ 在 bind 过程中以及实例化时都会被调用,因此请避免在此方法中产生副作用。请使用 setup。 |
|
请注意,Extension.__init__ 在 bind 过程中以及实例化时都会被调用,因此请避免在此方法中产生副作用。请使用 setup。 |
|
入口点封装类 |
Module Contents¶
- class nameko.messaging.Publisher(exchange=None, queue=None, declare=None, **options)[源代码]¶
Bases:
nameko.extensions.DependencyProvider
,HeaderEncoder
请注意,Extension.__init__ 在 bind 过程中以及实例化时都会被调用,因此请避免在此方法中产生副作用。请使用 setup。
此外,bind 和 iter_extensions 使用反射来查找扩展可能声明的任何子扩展。扩展上的任何描述符应该预计在反射过程中被调用,这发生在 ServiceContainer.__init__ 和 ServiceContainer.setup 之间。
Extension.container 属性提供对绑定到该扩展的 nameko.containers.ServiceContainer 实例的访问,否则为 None。
提供通过依赖注入的 AMQP 消息发布方法。
在 AMQP 中,消息被发布到 交换机,并路由到绑定的 队列。该依赖接受要发布的 exchange,并确保在发布之前已声明。
可选地,您可以使用 declare 关键字参数传递其他
kombu.Exchange
或kombu.Queue
对象,以便在发布之前进行声明。- Parameters:
- exchange
kombu.Exchange
目标交换机
- queue
kombu.Queue
已弃用: 绑定队列。事件将发布到该队列的交换机。
- declarelist
要在发布之前声明的
kombu.Exchange
或kombu.Queue
对象的列表。
- exchange
如果未提供 exchange,则消息将发布到默认交换机。
示例:
class Foobar(object): publish = Publisher(exchange=...) def spam(self, data): self.publish('spam:' + data)
- property serializer[源代码]¶
- 默认序列化器,用于发布消息。
必须作为 kombu serializer 注册。
- class nameko.messaging.QueueConsumer[源代码]¶
Bases:
nameko.extensions.SharedExtension
,nameko.extensions.ProviderCollector
,kombu.mixins.ConsumerMixin
请注意,Extension.__init__ 在 bind 过程中以及实例化时都会被调用,因此请避免在此方法中产生副作用。请使用 setup。
此外,bind 和 iter_extensions 使用反射来查找扩展可能声明的任何子扩展。扩展上的任何描述符应该预计在反射过程中被调用,这发生在 ServiceContainer.__init__ 和 ServiceContainer.setup 之间。
Extension.container 属性提供对绑定到该扩展的 nameko.containers.ServiceContainer 实例的访问,否则为 None。
- class nameko.messaging.Consumer(queue, requeue_on_error=False, **kwargs)[源代码]¶
Bases:
nameko.extensions.Entrypoint
,HeaderDecoder
入口点封装类
装饰器将方法标记为消息消费者。
来自队列的消息将根据其内容类型进行反序列化,并传递给被装饰的方法。 当消费者方法正常返回且没有引发任何异常时,消息将自动确认。 如果在消费过程中引发任何异常,并且 requeue_on_error 为 True,消息将被重新入队。
如果 requeue_on_error 为真,当处理事件时发生错误时,处理程序将返回事件到队列。默认值为假。
示例:
@consume(...) def handle_message(self, body): if not self.spam(body): raise Exception('消息将被重新入队') self.shrub(body)
- 参数:
queue: 要消费的队列。