相关疑难解决方法(0)

什么是放弃Azure SB消息的正确方法,以便将来以我可以控制的方式再次显示?

所以场景是我使用SB队列来限制对其他服务的传出回调.回拨给其他服务的标准问题之一是它们可能会因无法控制的时间而停机.假设我检测到目标已关闭/没有响应,放弃该消息的最佳模式是什么,以便它不会立即重新出现在队列中?

以下是我要么意识到的,尝试过或正在考虑的一些方法:

  • 显然,如果我只是使用BrokeredMessage::Abandon()该消息将被解锁并重新放回队列.对于这种情况以及我想要避免的情况,这显然是不可取的.

  • 如果我只是忽略了我遇到错误并且从不调用Abandon的事实,这将使它不会立即出现,但我真的没有细致的控制,直到它再次显示多久,我想实现一个腐朽的重试策略.

  • 我想也许我可以调用BrokeredMessage::Abandon(IDictionary<string, object>)并以某种方式更新ScheduledEnqueueTimeUTC属性,但我已经尝试了这个并且除了最初发送消息之外似乎没有办法影响该属性.有道理,但值得一试.

  • 我考虑过只是BrokeredMessage::Complete()在这种情况下使用,实际上只是用属性集将消息的新副本排入队列ScheduledEqueueTimeUTC.

最后的子弹几乎看起来太过沉重,但我得出结论,考虑到队列的固有性质,它可能是正确的答案.我只想到在Azure SB队列中可能有一个更好的方法来实现这一点,我很想念.

servicebus azure azureservicebus azure-servicebus-queues

25
推荐指数
1
解决办法
6560
查看次数

Azure 服务总线的 Azure Function App 延迟重试

首先让我解释一下我所拥有的。我自己有一个带有 Azure Function App 的 Azure 服务总线。服务总线设置为使用 SQL 过滤器将特定消息类型推送到特定主题。然后使用我的 Azure Function App,这些将获取最新的消息,然后对其进行处理。

一个基本的例子

1:我向我的 EmailAPI 发送请求

2:EmailAPI 然后将类型为“电子邮件”的新消息推送到服务总线中

3:SQL Filter 然后看到类型是“Email”,并将其放入 Service Bux 中的电子邮件主题中

4:EmailListener Azure Function 监视服务总线并注意到一条新消息

5:收集服务总线消息并处理它(基本上只是使用提供的信息发送电子邮件)

现在假设由于某种原因 SMTP 服务器连接有点中断,有时我们在尝试发送电子邮件 (EmailListener) 时收到 TimeOutException。现在,当抛出异常时,Function App EmailListener 将立即尝试再次发送,无需等待,它只会尝试再次发送。它将总共执行 10 次,然后通知服务总线将消息放入死信队列。

我试图做的是,当引发异常(例如 TimeOutException)时,我们等待 X 时间,然后再尝试再次处理相同的消息。我查看了许多讨论 host.json 的不同帖子并尝试设置这些设置,但这些都不起作用。我找到了一个解决方案,但是该解决方案要求您创建消息的克隆并将其推回服务总线并为其提供延迟的处理时间。如果 Azure 服务总线/功能应用程序可以自行处理重试,我宁愿不实现自己的手动延迟系统。

我遇到的最大问题(这可能取决于我的理解)是谁有错?是服务总线设置来处理重试策略,还是 Azure 函数应用程序来处理 X 次后尝试重试。

我提供了一些代码,但我觉得代码并不能真正帮助解释我的问题。

// Pseudo code
public static class EmailListenerTrigger
{
    [FunctionName("EmailListenerTrigger")]
    public static void Run([ServiceBusTrigger("messages", "email", Connection = "ConnectionString")]string mySbMsg, TraceWriter log)
    {
           var emailLauncher = new EmailLauncher("SmtpAddress", …
Run Code Online (Sandbox Code Playgroud)

c# cloud azure azureservicebus azure-functions

6
推荐指数
1
解决办法
4795
查看次数

How to implement exponential backoff in Azure Functions?

How to implement exponential backoff in Azure Functions?

I have a function that depends on external API. I would like to handle the unavailability of this service using the retry policy. This function is triggered when a new message appears in the queue and in this case, this policy is turned on by default:

For most triggers, there is no built-in retry when errors occur during function execution. The two triggers that have retry support are Azure Queue storage and …

.net c# azure azure-functions serverless

5
推荐指数
1
解决办法
1805
查看次数