【问题标题】:QueueClient.Complete(Guid) doesn't seem to be working when queueing another message in a service bus queue triggered function在服务总线队列触发函数中对另一条消息进行排队时,QueueClient.Complete(Guid) 似乎不起作用
【发布时间】:2019-04-02 18:20:08
【问题描述】:

在 Azure WebJobs 的 OnMessageOptions 类中,我通过将 AutoComplete 标志设置为 true 来调用 QueueClient.Complete(Guid) 方法,并且在运行 ProcessQueue 时消息似乎可以正常出列功能。成功处理每条消息后,活动消息计数减少 1。但是,当我想使用BrokeredMessage.ScheduledEnqueueTimeUtc 将消息(因为当前无法处理)重新排队返回到触发服务总线功能的队列时,作为一分钟后的新代理消息,它似乎不起作用.预定消息计数最初似乎增加了。几个小时后我回到队列,看到成千上万的活动消息。副本是相同的消息。怎么了?由于QueueClient.Complete(Guid) 和新的预定消息将被替换,我希望消息从队列中删除。

一些细节:

要发送消息,我执行以下操作:

var queueclient = QueueClient.CreateFromConnectionString(connectionString, queueName);
queueclient.Send(message);
queueclient.close();

在 WebJob 中,我创建了一个 ServiceBusConfiguration 对象,它需要一个 onMessageOptions 对象,我在其中设置了 AutoComplete=true。我将ServiceBusConfiguration 对象传递给JobHostConfiguration.UserServiceBus 方法。

在 WebJob 服务总线队列触发函数中,我再次执行以下操作以重新排队,首先再次创建代理消息的新实例。

//如果还不能处理,请重新排队...

var queueclient = QueueClient.CreateFromConnectionString(connectionString, queueName);
    queueclient.Send(message);
    queueclient.close();

执行以下操作/使用回调,这可能是它不起作用的原因?

var options = new OnMessageOptions();
options.AutoComplete = false;  // to call complete ourselves

回调处理收到的消息

client.OnMessage(m =>
{

    var clone = m.Clone();
    clone.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddSeconds(60);
    client.Send(clone);


    m.Complete();

}, options);

【问题讨论】:

  • 请注意,您使用的是旧的 Azure 服务总线库。虽然这不是问题的原因,但请考虑改用新客户端 (Microsoft.Azure.ServiceBus)。

标签: azure azure-servicebus-queues


【解决方案1】:

当我想使用 BrokeredMessage.ScheduledEnqueueTimeUtc 将消息(因为当前无法处理)重新排队返回触发服务总线功能的队列时,作为一分钟后的新代理消息,似乎不是工作

如果您未能处理您的消息,请不要重新排队。相反,放弃(with a reason),它会再次被捡起。

BrokeredMessage.ScheduledEnqueueTimeUtc 旨在用于添加到队列中的消息。当您收到消息时,您可以完成、死信、推迟或放弃。如果您放弃一条消息,它将被重试,但您无法控制何时发生。如果队列中没有其他消息,几乎会立即重试。

注意:当您发现您怀疑不正确的行为时,分享一个简单的重现会非常有帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-06-17
  • 2021-12-21
  • 2019-03-27
  • 2018-09-02
  • 1970-01-01
  • 2012-08-28
  • 2017-10-18
  • 1970-01-01
相关资源
最近更新 更多