使用事件(发布-订阅)分发日志数据的Nameko依赖项提供者。
项目描述
Nameko依赖项提供者,使用事件(发布-订阅)分发日志数据。
用法
分发事件日志数据
在您的服务类中包含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_type、event_data(可选)和metadata(可选)可以作为参数提供。两者的event_data和metadata都必须是字典,并包含可序列化为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_URI和AMQP_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.12、2.13、2.14
更改日志
请参阅CHANGELOG文档,了解每个版本的修复和增强。
许可证
MIT许可证。有关详细信息,请参阅LICENSE。
项目详细信息
nameko-eventlog-dispatcher-0.4.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7c1c642e138b50def3d071f6800aeb894ce249129755e397932ef0e13266f184 |
|
MD5 | a123b23d19a0eda239db4e60df692321 |
|
BLAKE2b-256 | c77e3aed7d17fee0b2447710b8c56dcb6584dafe1907a750484a042e1fdcc76b |
nameko_eventlog_dispatcher-0.4.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d33bb46ed2c9260354a01a4c0d0945568cdab4f75a68366ed961b32a806fa78f |
|
MD5 | ff655f0f45d42e4ee30a842244be0c7a |
|
BLAKE2b-256 | c52bb7fc13c5e3dd0ca092a124c538b6e46b6255ef74ca468247ee18840472d4 |