一个可以从多个输入源中消耗事件并将其发布到标准PSHB集线器的PubSuuHubBub发布器和Atom feed生成器。

yagi的Python项目详细描述


#yagi

一个用python编写的模块化openstack通知事件处理器/广播程序。


yagi设计用于有效地收集json格式的amqp消息
openstack项目通知总线使用,从大量可配置的队列中收集,并通过一组可扩展的简单处理程序对其进行处理。.

处理程序编写简单,可以在类似wsgi的体系结构中链接。
yagi一次处理一批获取消息,并将获取的
消息传递给每个处理程序,处理amqp消息语义,以便处理程序可以集中处理手头的任务。

已在数据存储中持久化的通知事件的分页atom feed


对于feed
服务器(如atomhopper)(http://atomhopper.org/)
*redis:将通知持久化到redis数据库非常有用。可以与
Yagi的feed守护程序一起使用。
*pubsububub:在通知到达时ping pubsububub集线器。
与集线器和Yagi的feed守护程序一起,这可以
启用对通知事件的发布/订阅订阅。
*stacktacking:与stacktach openstack监视一起工作以ol到
监视事件源。如果您使用yagi提供openstack通知的
feed,那么当更新这些feed时,这将ping
stacktach,通知它更新的成功或失败,让您捕捉feed服务器是否关闭,或某个系统是否
正在删除事件。

fig文件可以这样传递给yagi:

yagi event-c/path/to/config/file

yagi不进行后台监控。使用您最喜欢的守护进程管理器来执行此操作。



解开。这允许yagi
在feed中正确地构造链接。
*持久性:如果使用redis处理程序,请将reddisc连接
信息放在此处。
*consumers:"queues"配置变量列出了yagi应该监听的队列。
*consumer:$queue\u name:对于yagi正在监听的每个队列配置文件中应该有一个consumer部分
(例如,如果您有一个名为
some.queue的队列在[consumers]部分中列出,
应该有一个[consumer:some.queue]
部分,其中配置了hat-specific queue.)
这应该列出队列的属性,比如它应该是持久的。
这里的重要变量是"apps",
这是一个用逗号分隔的处理程序列表,其中
来自该队列的消息应被传递到,以及"max_messages",它是Yagi将拉取的最大消息数一次排队。(然后进入下一个队列,
最终,如果仍有
消息等待,

通过运行多个进程来扩展。只需启动尽可能多的yagi事件进程,就可以处理负载。(Yagi事件相当轻量级)

/>*pubsububbub_publish(如果使用pubsububub处理程序)(在从
[谷歌代码](http://code.google.com/p/pubsububbub/source/checkout)签出项目后,可在
publisher_clients文件夹下找到)
注意:计划稍后用我们的实现替换此依赖项。在
*carrot上(如果使用rabbit)
*路由

ownloads.html

,然后签出引用中心。



install pubsububbub_publisher for python

cd pubsububbub read only/publisher_clients/python
sudo python setup.py inst所有

启动集线器

cd pubsububbub只读
dev_appserver.py hub/-p<;在yagi.conf>中指定的端口号;


pubsubub的测试订阅。

cd yagi

#会话,因为回调进程不会对python subscriber/callback.py<;sub_port>;
python subscriber/sub.py<;topic>;<;callback>;


i通常在ipython会话中加载other/push_rabbit.py
cd other
ipython
导入push-rabbit

ack.py,上面。


\brokers、consumers和handlers(apps)

配置文件中定义为:

[event\u worker]
event\u driver=yagi.broker.rabbit.broker

为定义的每个输入队列创建。

[消费者]
队列=队列1,队列2

[消费者:队列1]
应用程序=yagi.handler.handler1,myhandlers.handler
路由密钥=通知。警告

[消费者:队列2]
应用程序=…

并将它们交给
处理程序进行处理。由于遗留原因,处理程序也称为应用程序。
处理程序被链接在一起,如果处理程序认为调用子处理程序是适当的(默认行为),则处理程序的职责是调用子处理程序。
但是,某些处理程序可能希望在其他条件下因错误而终止链。每个处理程序还可以自己处理消息。首先根据该处理程序的筛选器列表检查
通知,如果
被接受,则调用"handle_messages()"方法。子处理程序总是被未筛选的调用。

[筛选器]
cufpub=compute.instance.exists.verified,compute.instance.exists

当前,筛选器应用于所有处理程序,但这应更改为每个处理程序筛选器列表。

看看"八木"。处理程序。有关详细信息,请参阅初始化。

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

推荐PyPI第三方库


热门话题
编译器构造为什么在Java中允许初始化对Null的引用?   java手动调用javax的actionPerformed。摆动计时器   使用git分支的java Maven版本控制   Java8句子流   java JPA OneToOne和OneToMany实体实例化/创建   java如何将值添加到列表<Map<String,Object>>?   java如何使用ComboBox在一个框架内更改JPanel。getSelectedIndex()   java在比较XML和xmlunit时忽略文本差异   java无法从其他pc连接到本地主机   Java中分配对象id的优雅方式   Java中静态变量的使用   java试图从Neteller获取OAuth访问令牌时产生错误:“服务器返回HTTP响应代码:401表示URL”   Java:基元类型是否会影响性能?   java可以让hasNext()不区分大小写吗?   基于AutoCompleteTextView建议属性或AutoCompleteTextView值的java Android搜索   java流文件到firefox浏览器有时无法打开应用程序对话框   在没有ArrayList的Java中返回数组中的搜索结果   复制java。木卫一。IOException:数据错误(CRC)   java为什么我在尝试删除Facebook测试用户时会出现“方法未实现”错误   java如何使用JNA调用SetProcessReliationPolicy