跳转到主要内容

使用事件(发布-订阅)分发日志数据的Nameko依赖项提供者。

项目描述

Nameko依赖项提供者,使用事件(发布-订阅)分发日志数据。

https://img.shields.io/pypi/v/nameko-eventlog-dispatcher.svg https://img.shields.io/pypi/pyversions/nameko-eventlog-dispatcher.svg https://img.shields.io/pypi/format/nameko-eventlog-dispatcher.svg https://travis-ci.org/sohonetlabs/nameko-eventlog-dispatcher.png?branch=master

用法

分发事件日志数据

在您的服务类中包含EventLogDispatcher依赖项

from nameko.rpc import rpc
from nameko_eventlog_dispatcher import EventLogDispatcher


class FooService:

    name = 'foo'

    eventlog_dispatcher = EventLogDispatcher()

    @rpc
    def foo_method(self):
        self.eventlog_dispatcher(
          'foo_event_type', {'value': 1}, metadata={'meta': 2}
        )

调用foo_method将从foo服务中分发一个事件,其中log_event为事件类型。但是,foo_event_type将作为事件元数据的一部分存储的事件类型。

event_typeevent_data(可选)和metadata(可选)可以作为参数提供。两者的event_datametadata都必须是字典,并包含可序列化为JSON的数据。

然后,任何Nameko服务都将能够处理此事件。

from nameko.events import event_handler


class BarService:

    name = 'bar'

    @event_handler('foo', 'log_event')
    def foo_log_event_handler(self, body):
        """`body` will contain the event log data."""

在入口点被触发时捕获日志数据

在您的Nameko配置文件中启用自动捕获事件日志

# config.yaml

EVENTLOG_DISPATCHER:
  auto_capture: true
  entrypoints_to_exclude: []
  event_type: log_event

上述所有属性都是可选的,仅用于覆盖它们的默认值。

auto_capture设置为true后,每次触发入口点时,都会分发一个Nameko事件

  • 它们也可以通过监听从服务分发它们的log_event事件来处理。

  • entrypoint_fired将是作为事件元数据存储的事件类型。

  • 只有列在ENTRYPOINT_TYPES_TO_LOG类属性中的入口点才会被记录。

  • entrypoints_to_exclude可以用来提供一个要排除的入口点方法名称列表,当自动触发事件时。

event_type可以添加到配置中,以覆盖用于分发此类事件的默认Nameko事件类型。

事件日志数据的格式

这是事件日志数据的格式

{
  "service_name": "foo",
  "entrypoint_protocol": "Rpc",
  "entrypoint_name": "foo_method",
  "call_id": "foo.foo_method.d7e907ee-9425-48a6-84e6-89db19e3ce50",
  "call_stack": [
    "standalone_rpc_proxy.call.3f349ea4-ed3e-4a3b-93d0-a36fbf928ecb",
    "bla.bla_method.21d623b4-edc4-4232-9957-4fad72533b75",
    "foo.foo_method.d7e907ee-9425-48a6-84e6-89db19e3ce50"
  ],

  "event_type": "foo_event_type",  # "entrypoint_fired", ...
  "timestamp": "2017-06-12T13:48:16+00:00",

  "meta": 2,  # extra information provided as "metadata"
  "data": {"value": 1}  # extra information provided as "event_data"
}

data属性将包含在分发事件时作为event_data参数提供的事件数据。

如果提供了metadata,则其元素将作为事件日志数据中的顶级属性包括在内。

测试

假设在默认URI guest:guest@localhost上运行着默认端口上的RabbitMQ,并使用默认端口。有一个Makefile目标,用于在本地使用默认端口和配置运行RabbitMQ Docker容器

$ make docker-rabbitmq-run

在本地运行测试

$ # Create/activate a virtual environment
$ pip install tox
$ tox

还有其他Makefile目标可以运行测试,但需要安装额外的依赖项

$ pip install -U --editable ".[dev]"
$ make test
$ make coverage

可以通过提供不同的RabbitMQ URI来覆盖以下环境变量:RABBIT_CTL_URIAMQP_URI

还可以通过使用ARGS变量提供额外的pytest参数

$ make test RABBIT_CTL_URI=http://guest:guest@dockermachine:15673 AMQP_URI=amqp://guest:guest@dockermachine:5673 ARGS='-x -vv --disable-pytest-warnings'
$ make coverage RABBIT_CTL_URI=http://guest:guest@dockermachine:15673 AMQP_URI=amqp://guest:guest@dockermachine:5673 ARGS='-x -vv --disable-pytest-warnings'

Nameko支持

以下Nameko版本受到支持

  • 2.x系列:2.122.132.14

更改日志

请参阅CHANGELOG文档,了解每个版本的修复和增强。

许可证

MIT许可证。有关详细信息,请参阅LICENSE

项目详细信息


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关安装软件包的更多信息。

源分发

nameko-eventlog-dispatcher-0.4.2.tar.gz (6.5 kB 查看哈希值)

上传时间 源码

构建分发包

nameko_eventlog_dispatcher-0.4.2-py3-none-any.whl (6.3 kB 查看哈希值)

上传时间 Python 3

支持