当前位置: 首页 > 知识库问答 >
问题:

如何在django应用程序中用azure服务总线替换芹菜任务?

洪高阳
2023-03-14

在Django应用程序中,我被要求使用azure服务总线而不是芹菜。

阅读提供的文档,但没有清楚地了解如何使用服务总线而不是芹菜任务。提供的任何建议都将非常有用。

共有1个答案

丁俊爽
2023-03-14

在开始之前,我想强调一下Azure服务总线和芹菜之间的区别。

Azure服务总线:

Microsoft Azure Service Bus 是一个完全托管的企业集成消息代理。

您可以参考这篇文章来了解更多关于服务总线的信息

芹菜:

分布式任务队列。Celery 是基于分布式消息传递的异步任务队列/作业队列。

在你的情况下,我可以想到两种可能性:

    < li >您希望使用Service Bus with Celery来代替其他消息代理。 < li >用服务总线替换芹菜

1:您想将Service Bus与Celery一起使用以代替其他消息代理。

您可以参考这篇文章来理解为什么celery需要一个消息代理。我不确定你现在用的是哪个消息代理,但是你可以使用Kombu库来满足你的需求。

Azure服务总线参考:https://docs.celeryproject.org/projects/kombu/en/stable/reference/kombu.transport.azureservicebus.html

其他参考:https://docs . celery project . org/projects/kombu/en/stable/reference/index . html

2:完全用服务总线替换芹菜以满足您的要求:

考虑

    < li >消息发送者是生产者 < li >消息接收者是消费者

这是两个不同的应用程序,您必须处理它们。

您可以参考下面的内容来获得更多的示例代码。

https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/servicebus/azure-servicebus/samples

解释:

    < li >每次您想要执行操作时,您可以从producer客户端向主题发送消息。 < li >消费者客户端-正在侦听的应用程序将接收消息并对其进行处理。您可以将您的定制流程附加到它上面——这样,无论何时在消费者客户端收到消息,您的定制流程都会得到执行。

以下是接收客户端的示例:

from azure.servicebus.aio import SubscriptionClient
import asyncio
import nest_asyncio
nest_asyncio.apply()

        
Receiving = True

#Topic 1 receiver : 
conn_str= "<>"
name="Allmessages1"
SubsClient = SubscriptionClient.from_connection_string(conn_str, name)
receiver =  SubsClient.get_receiver()

async def receive_message_from1():
    await receiver.open()
    print("Opening the Receiver for Topic1")
    async with receiver:
      while(Receiving):
        msgs =  await receiver.fetch_next()
        for m in msgs:
            print("Received the message from topic 1.....")
            ##### - Your code to execute when a message is received - ########
            print(str(m))
            ##### - Your code to execute when a message is received - ########
            await m.complete()
            
            
loop = asyncio.get_event_loop()
topic1receiver = loop.create_task(receive_message_from1())

以下行之间的部分将是每次收到消息时都会执行的指令。

##### - Your code to execute when a message is received - ########
 类似资料:
  • 我们继续看到Azure服务总线的不稳定性,并正在寻找替代方案。理想情况下,我们希望能够在Windows 2012 R2域中本地运行,并拥有许多与Azure SB相同的功能集。我们已经查看了Windows 1.1的服务总线,但是该产品已经有一段时间没有更新了,我们也不确定它的未来。我们使用C#,因此理想情况下会有一个客户端API/包装器,使与现有应用程序的集成相对容易。完全可以接受开源和自由软件。:

  • 问题内容: 我正在尝试创建Windows服务来启动Celery。我碰到了一篇使用Task Scheduler 来做的文章。但是,它似乎启动了许多芹菜实例,并不断消耗内存直到机器死机。有什么方法可以将其作为Windows服务启动吗? 问题答案: 我从另一个网站得到了答案。Celeryd(Celery的守护程序服务)作为粘贴应用程序运行,在这里搜索“ Paster Windows Service”会导

  • 我对蔚蓝世界还不熟悉。我们正在构建一个系统,该系统在高级别上的性能低于1。订阅服务总线主题(使用Microsoft.azure.servicebus)2。侦听事件(使用Microsoft.azure.servicebus)3。当事件进入订阅时执行某些操作 想知道是否有一种方法可以在不连接到实际服务总线的情况下本地模拟Azure服务总线主题。我们的想法是在本地使用该模拟器进行开发和测试,而无需连接到

  • 我正在使用angular框架构建前端应用程序。有没有办法,我如何将应用程序部署到Azure Linux应用程序服务? 我已经用NodeJS堆栈创建了Web应用程序,并将其分配给Linux应用程序服务。我用命令构建了我的angular应用程序,并将其部署到这个web应用程序中。当我使用url:

  • 但是,我得到以下例外情况: Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时发生异常:Functions.ProcessQueueMessage2Async---->System.Runtime.Serialization.InvalidDataContractException:无法序列化类型“MyException”。

  • 我正在开发一个Azure逻辑应用,其中有一个服务总线窥视锁触发器。服务总线的消息锁定持续时间为5分钟。我希望每5分钟有一个自动更新令牌机制,以防逻辑应用实例需要超过5分钟,以便该过程可以继续,而无需释放锁,让另一个消费者将消息带走。 有什么方法可以通过Logic应用程序实现这一点吗?