两个 django 应用程序之间的双向通信
Posted
技术标签:
【中文标题】两个 django 应用程序之间的双向通信【英文标题】:Bidirectional communication between two django applications 【发布时间】:2019-05-19 04:17:22 【问题描述】:这可能是一个关于微服务的基本问题。我搜索了几篇文章,但找不到任何合适的东西。我正在开发两个不同的 django rest 应用程序(比如 A 和 B),它们必须使用相同的身份验证服务。我已经使用 django-rest-framework-simplejwt 构建了身份验证服务。我目前的计划是当令牌发送到 A 时,我使用身份验证服务中的 TokenVerifyView 来验证令牌。在某些需要用户信息的情况下,我在身份验证服务中创建了一个视图来返回用户名。我打算通过使用装饰器向 A 中的每个视图的身份验证服务发送请求来实现这一点。我知道这会很慢,是一个次优的解决方案。有什么更好的方法来实现这一目标?谢谢。
【问题讨论】:
这三个应用程序有不同的数据库吗?另外,您的意思是TokenVerifyView
在您导入到应用程序A 的身份验证应用程序中吗?
是的,这三个应用程序都有不同的数据库。 jwt app提供的TokenVerifyView在鉴权项目中。而且我没有导入项目,因为它们都在不同的服务器上,我打算调用身份验证项目的 URL 以在 A 中获取 JSON 响应,解析它并在 A 中发送响应。
【参考方案1】:
这在大多数情况下似乎是正确的,但我不确定您是否想在对 A 或 B 的每个 API 请求期间调用身份验证服务的 API 以进行授权。为了更高的吞吐量,我认为您应该查看在像 ZeroMQ 这样的消息队列中,这可能是一个理想的解决方案。
您还可以在此处使用 django-channels 启用使用 Web 套接字的 Web 应用程序之间的通信。这两种解决方案都更容易实现。
对于基本系统,每次调用任一微服务时都联系授权服务是可行的,但最终您会遇到可扩展性问题,此时您可能需要想出一种联系授权服务一次的方法。我觉得这超出了这个问题的范围,但如果您想了解更多相关信息,可以查看this *** 答案。
【讨论】:
感谢您的宝贵时间。我会阅读您提到的所有内容并尝试实施。以上是关于两个 django 应用程序之间的双向通信的主要内容,如果未能解决你的问题,请参考以下文章