使用celery在Django中实现SOA

时间:2012-04-29 00:10:59

标签: django celery django-celery

我想用SOA设计实现一个Web应用程序。我正在考虑将芹菜与Django结合使用来做到这一点。但我有一些问题:

  1. 这是为Django实现SOA设计的正确方法
  2. 假设这是要走的路,我将如何在Django框架内完成身份验证。具体来说,我希望身份验证与生产者和消费者模式分离。这样,可以使用REST api(或任何相关内容)来生成身份验证凭据,并且可以使用消费者(在Django框架内)来读取凭据并对其执行操作。
  3. 同样,我应该在Django中使用Celery进行上述操作吗?

2 个答案:

答案 0 :(得分:9)

消息队列(例如由celery代理的rabbitmq)是处理SOA组件之间通信的完美方式。此外,如果您需要实时通信而不在服务之间共享数据库,则REST基本上是为此而制定的。在Django之上实现REST服务有几种选择,Tastypie和Django-Rest-Framework是受欢迎的选择。

至于在组件之间传递身份验证,Django有几种选择。与流行的观点相反,Django身份验证框架非常灵活,支持对您可以编写后端的任何内容进行授权/身份验证。有关此问题的文档,请参阅https://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend

已经有很多例子:

至于发布身份验证,选项较少,但其中包括:

我强烈建议您使用已经构建并经过自行测试的提供程序包。实施SSO看似棘手。

答案 1 :(得分:4)

Django并不是真正为SOA而构建的。在身份验证的情况下,Django有一个定义明确的身份验证框架,可以轻松地在Web,API等上重用它。

一般来说,如果您希望灵活地定义自己的架构,Django可能不适合您。你可能想要考虑一些更简约的东西,比如web.py