【发布时间】: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