我有两个不同的项目
默认-项目1数据库
db2-项目2数据库
默认-项目2数据库
我在项目1中使用序列化程序,项目2的模型等的操作。 我将完整的应用程序从项目2复制到项目1,并在settings.py中注册了该模型,还删除了migrations文件夹,因此,无论何时我在项目1 shell中进行迁移,它都不会为项目2应用程序(项目1和因此,迁移不会在项目1中添加项目2的任何模型。
现在我面临的问题是我必须在项目1中导入的项目2应用的模型上使用post_save信号,并在project1中得到通知
@receiver(post_save, sender=Project2Model)
def project2model_save_hook(sender, instance, created, **kwargs):
print(created)
仅当项目2中存在此信号但项目1中不存在此信号时,此功能才起作用。在项目1中,当在项目2的默认db或项目1的db2中创建对象时,将永远不会调用该信号
我应该如何进行?
答案 0 :(得分:3)
信号是特定于Django的,仅在同一过程中触发。如果要在不同项目之间触发功能/工作负载,则需要开始使用某种事件驱动的体系结构。
最基本的解决方案是使用消息队列,例如rabbitmq
,kafka
甚至redis (pub/sub)
。这是您的情况的一个非常简单的示例:
model1_instance_created
的Rabbitmq队列model1_instance_created
的消息model1_instance_created
,您就会向post_save
发布新消息。但是,您还需要考虑其他事项。是否使project1和project2共享相同的数据库(希望不是)。如果没有,他们如何同步数据?数据一致性呢?然后是网络延迟以及与微服务有关的所有其他问题。