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:
问:我如何进行压力测试?
答:待续。正在创建脚本。