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

如果Azure Service Bus队列触发器Func失败,如何将队列消息返回Azure Service Bus队列

海灵均
2023-03-14

我使用VisualStudio代码创建了一个Azure Service Bus Queue Trigger Python函数,如果代码失败,我希望将消息返回到Service Bus队列。

import requests
import azure.functions as func
from requests.exceptions import HTTPError

def main(msg: func.ServiceBusMessage):
    message = msg.get_body().decode("utf-8")

    url = "http://..."

    # My code
    try: 
         requests.post(url=url, params=message)
    except Exception as error:
         logging.error(error)
         # RETURN MESSAGE TO QUEUE HERE

我找到了一些关于一个名为unlock()和discard()的方法的信息,但我不知道如何实现它。以下是这些文档的链接:

  • 解锁:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-python-how-to-use-queues#handle-应用程序崩溃和无法读取的消息

我还发现,如果函数失败,队列会自动将消息发送到队列,但是,我应该写一个加薪吗?

还有,有没有办法将此消息返回队列并设置稍后重试的计划?

共有1个答案

田普松
2023-03-14

服务总线触发器python函数以PeekLock模式运行。您不必调用unlock()和放弃()方法。检查PeekLock行为描述:

函数运行时以PeekLock模式接收消息。如果函数成功完成,它将在消息中调用完成,如果函数失败,它将调用放弃。如果函数运行时间长于PeekLock超时,则只要函数运行,锁就会自动更新。

 类似资料:
  • 我正在使用带有队列触发器的Azure Functions。 当函数运行时,它会从Azure队列中删除一个项目。然而,有时我的处理会失败,在这种情况下,我想重新申请该项目,并在以后进行处理。 如何在Azure函数和使用Node中实现这一点。js?

  • 我们试图在我们的Spring Boot应用程序中使用sping-Rabbit创建一个消息侦听器。但是,如果队列不存在,我们在接收消息期间会遇到问题,应用程序会抛出错误,称为被动声明。 我们想要的是主动声明队列,即如果队列不存在,则应该在mq中声明它。

  • 为什么已经拥有了共享内存时需要消息队列呢? 这将是多种原因,让我们将其分解为多个点来简化 - 据了解,一旦消息被一个进程接收到,它将不再可用于任何其他进程。 而在共享内存中,数据可供多个进程访问。 如果想使用小信息格式进行通信。 当多个进程同时进行通信时,共享内存数据需要同步保护。 使用共享内存的写入和读取频率很高,那么实现功能将会非常复杂。 在这种情况下不值得使用。 如果所有的进程不需要访问共享

  • 一、消息模型 点对点 发布/订阅 二、使用场景 异步处理 流量削锋 应用解耦 三、可靠性 发送端的可靠性 接收端的可靠性 参考资料 一、消息模型 点对点 消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。 发布/订阅 消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。 发布与订阅模式和观察者模式有以下不同: 观察者模式中,观察者和主题都知道对方的存在;

  • 一个线程会从消息队列中收取消息,另一个线程会定时给消息队列发送普通消息和紧急消息 一个线程会从消息队列中收取消息,另一个线程会定时给消息队列发送普通消息和紧急消息 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: *

  • 消息队列接口 结构体 struct   rt_messagequeue   消息队列控制块 更多...   类型定义 typedef struct rt_messagequeue *  rt_mq_t   消息队列类型指针定义   函数 rt_err_t  rt_mq_init (rt_mq_t mq, const char *name, void *msgpool, rt_size_t msg_