Fedora通知的后端工作守护进程
项目描述
fmn 是一组用于管理由 fedmsg,Fedora FEDerated MESsage bus 触发的最终用户通知的系统。
此模块包含 Fedora 通知的后端工作守护进程。
有一个父级占位符存储库,其中包含一些您可能想要阅读的有用信息,例如一个 概述,一个简单的 架构图。
开发
运行
项目部分有三个组件需要运行
fedmsg 消费者
一个或多个工作进程
后端
消费者是应用程序的一部分,它从 fedmsg 接收消息,然后将它们发送到工作进程(例如:要将通知发送给哪些人以及通过哪个渠道)。然后,工作进程将结果发送到后端,它接收这些结果并仅执行 I/O 操作:发送电子邮件、在 IRC 上发布等等。
要运行这些部分,只需简单地启动 rabbitmq-server 和 redis,然后在三个不同的终端中调用(所有终端都在相同的虚拟环境中运行)
$ fedmsg-hub $ python fmn/consumer/worker.py $ python fmn/consumer/backend.py
实用脚本
在 scripts/ 目录中有一个实用脚本,用于调试为什么某些用户收到了或没有收到消息。它需要一个用户名和一个 fedmsg msg_id,并尝试根据该用户的生成首选项查看这两个是否匹配。
架构
+-------------+
Read | | Write
+------+ prefs DB +<------+
| | | |
+ | +-------------+ |
| | | +------------------+ +--------+
| | | | |fmn.lib| | | |
| v | | +-------+ |<--+ User |
| +----------+ +---+ | | |
| | fmn.lib| | Central WebApp | +--------+
| | | +------------------+
| +----->| Worker +--------+
| | | | |
fedmsg | +----------+ |
| | |
| | +----------+ |
| +------------------+ | | fmn.lib| | +--------------------+
| | fedmsg consumer | | | | | | Backend |
+-->| +------------>| Worker +--------------->| |
| | | | | | | +-----+ +---+ +---+
| +------------------+ | +----------+ | |email| |IRC| |SSE|
| | | +--+--+---+-+-+--+-+-+
| | +----------+ | | | |
| | | fmn.lib| | | | |
| | | | | | | |
| +----->| Worker +--------+ | | |
| RabbitMQ | | RabbitMQ | | |
| +----------+ | | |
| v v v
|
|
|
v
常见问题解答
问:如果工作进程和后端抱怨
self.db[key] = value TypeError: String or Integer object expected for key, unicode found
答:修改 fedmsg.d/fmn.py 的配置以使用 redis
# Some configuration for the rule processors
"fmn.rules.utils.use_pkgdb2": False,
"fmn.rules.utils.pkgdb2_api_url": "http://209.132.184.188/api/",
"fmn.rules.cache": {
'backend': 'dogpile.cache.redis',
'arguments': {
'host': 'localhost',
'port': 6379,
'db': 0,
'redis_expiration_time': 60*60*2, # 2 hours
'distributed_lock': True
},
# "backend": "dogpile.cache.dbm",
# "expiration_time": 300,
# "arguments": {
# "filename": "/var/tmp/fmn-cache.dbm",
# },
},
问:当我运行工作进程和后端时,它们立即不断退出
答:您是否正在运行 rabbitmq-server 和 redis?
systemctl status rabbitmq-server redis
如果没有,请运行
systemctl start rabbitmq-server redis
问:在运行 fedmsg-hub 时,输出显示一些内容未初始化
答:您已更新存储库并再次运行设置了吗?
git pull workon fmn python setup.py develop
问:我现在已运行 fedmsg-hub、worker.py 和 backend,接下来怎么办?
答:加载网页界面并启用 IRC,并添加您的昵称。查看 fmn.web 和 fmn 以获取更多信息。
问:它说我的昵称无效
答:您的昵称已注册吗?如果没有,请使用正确的信息运行此操作
/msg NickServ REGISTER password youremail@example.com
src: freenode
问:我如何知道它是否工作正常?
答:在 IRC 中,您应该会收到来自 threebot 的联系。
<threebot> <user>.id.fedoraproject.org has requested that notifications be sent to this nick <threebot> * To accept, visit this address:
问:我如何进行压力测试?
答:待续。正在创建脚本。