nameko依赖提供程序,使用事件(pub-sub)分派日志数据。

nameko-eventlog-dispatcher的Python项目详细描述


Nameko dependency provider that dispatches log data using ^{tt1}$ (Pub-Sub).
https://img.shields.io/pypi/v/nameko-eventlog-dispatcher.svghttps://img.shields.io/pypi/pyversions/nameko-eventlog-dispatcher.svghttps://img.shields.io/pypi/format/nameko-eventlog-dispatcher.svghttps://travis-ci.org/sohonetlabs/nameko-eventlog-dispatcher.png?branch=master

用法

调度事件日志数据

在服务类中包含EventLogDispatcher依赖项:

fromnameko.rpcimportrpcfromnameko_eventlog_dispatcherimportEventLogDispatcherclassFooService:name='foo'eventlog_dispatcher=EventLogDispatcher()@rpcdeffoo_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服务都可以处理此事件。

fromnameko.eventsimportevent_handlerclassBarService:name='bar'@event_handler('foo','log_event')deffoo_log_event_handler(self,body):"""`body` will contain the event log data."""

启动入口点时捕获日志数据

Nameko配置文件中启用自动捕获事件日志:

# config.yamlEVENTLOG_DISPATCHER:auto_capture:trueentrypoints_to_exclude:[]event_type:log_event

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

auto_capture设置为true时,将调度Nameko事件 每次触发入口点时:

  • 它们也可以通过从 派遣他们的服务。
  • 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,则其元素将作为顶部包含 事件日志数据中的级别属性。

测试

假设rabbitmq已启动并在默认uri上运行 guest:guest@localhost并使用默认端口。有一个 makefile目标使用 默认端口和配置:

$ 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

还可以使用^{tt26}提供附加的pytest参数$ 变量:

$ make testRABBIT_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.62.72.82.92.102.112.12

更改日志

咨询CHANGELOG 每个版本的修复和增强文档。

许可证

麻省理工学院的执照。见LICENSE 详细情况。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
eclipse如何将LWUIT主题文件加载到Java项目中?   JavaJPA HibernateFetchType。渴望和获取模式。加入非主键   java为单个和多个对象创建对象容器   java在到达末尾时在viewpager2中加载更多项目   java我怎么能忽略它。解压时存储DS_和MACOSX文件?   java我无法使用ApachePOI3.10读取xlsx文件   java为什么我在Android应用程序的webView中看到广告(我没有注册任何广告)   在Java中,PrintWriter write()方法在哪里写入数据   c#ProcessStartInfo挂在“WaitForExit”上?为什么?   安卓中的java解析查询问题   java Android摄像头在拍照时禁用   爪哇交货过早地从jsprit的仓库提货   java退避算法仿真   java我的计数反转算法有什么问题?   java什么导致一个类中的变量受到另一个类的影响?   JavaVaadin和Spring引导问题   java无法使用writerInterceptor拦截jersey资源方法   java如何根据配置选择RedisCluster、RedisStandalone和Sentinel连接?   java GSON/如何解析数字   java:字节码中的字符串concat转换为StringBuilder