我正在尝试为我的一些 python 模块创建一个中央日志记录系统。我希望能够从多个带有日志的模块发送消息,然后中央记录器将它们接收并进行处理。
为简单起见,我希望我的模块 A 看起来像这样:
bus = connect_to_a_bus_that_is_always_there
while True:
#Publish a message to message bus, pseudo code
bus.publish(topic="logs.a", message="example")
time sleep(1)
和记录器(唯一的订阅者)
def actOnNewMessage(msg):
if msg.topic.subtopic == "a":
doSomethingForA(msg.data)
bus = connect_to_a_bus_that_is_always_there
bus.subscribe("logs", handler=actOnNewMessage)
while True:
#wait for messages
现在 Logger 模块就像一个库,所以它不是持续运行的,所以也许我可以在 Logger 和 Message Bus 之间引入一些东西,它会不断地观察新消息。
我看过PyPubSub但它似乎没有在文档中介绍不同正在运行的 python 模块之间的持久通信。如果有人尝试过这个,如果我可以在不同的模块之间使用它,它对我有用。
另一个问题是我最终可能会得到不是用 python 编写的模块,所以我真的不想要模块 A、B 和 Logger 之间的直接通信。最后我的架构可能是这样的:
我希望上面的信息不会令人困惑。
tl;dr:在 python 中使用持久消息总线和不断等待新消息的订阅者发布-订阅。有现成的解决方案吗?
编辑:我正在考虑运行一个知道 Logger 模块的 Web 套接字服务器,而其他模块 A、B 知道 websocket 的地址。这种设计有什么缺点吗?