首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QueueTrigger不删除队列中的消息。

QueueTrigger不删除队列中的消息。
EN

Stack Overflow用户
提问于 2020-06-11 20:31:30
回答 2查看 398关注 0票数 0

.NET Core2.2,WebJobs SDK3.0

我有一个网络作业可以接收队列中的消息。像这样的标准QueueTrigger

代码语言:javascript
复制
public void ProcessQueueMessage(
              [QueueTrigger("%WebJobs:WorkerQueueName%")] CloudQueueMessage queueMessage, 
              ILogger log)

在流程结束时,我将消息写入另一个队列(归档)。

函数成功完成,但消息保存在源队列中。

在存储资源管理器中,我看到了这一点(在本例中,我有3条消息挂起)

消息在10分钟后再次退出队列。

当我的函数成功时,我如何才能使消息退出队列?

顺便说一下,我的队列配置是

代码语言:javascript
复制
BatchSize             1  
MaxDequeueCount       2  
MaxPollingInterval    00:00:04  
VisibilityTimeout     02:00:00
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-12 13:12:13

结果是,我使用我获得的queueMessage对象作为参数,直接将它放入另一个队列中,这可能会使SDK感到困惑。

代码语言:javascript
复制
public void ProcessQueueMessage(
              [QueueTrigger("%WebJobs:WorkerQueueName%")] CloudQueueMessage queueMessage, 
              ILogger log)

因此,我更改了它,并在将它放入另一个队列之前创建了一个新的CloudQueueMessage对象。

代码语言:javascript
复制
var newMessage = new CloudQueueMessage(queueMessage.AsString);

现在,当我的函数返回时,消息将正确地从队列中删除。

票数 0
EN

Stack Overflow用户

发布于 2020-06-12 08:44:37

SDK应该已经处理好了。

默认情况下,消息将被租赁(或变得不可见)30秒。如果任务所需时间超过该时间,则将续签租约。除非主机崩溃或函数抛出异常,否则该消息将不可用于该函数的另一个实例。当函数成功完成时,SDK将删除消息。

当从队列中检索消息时,响应包括消息和pop接收值,这是删除消息所必需的。消息不会自动从队列中删除,但在检索完消息后,其他客户端将无法在visibilitytimeout参数指定的时间间隔内看到该消息。检索消息的客户端将在消息被处理后并在响应的TimeNextVisible元素指定的时间之前删除该消息,该响应元素是根据visibilitytimeout参数的值计算的。将visibilitytimeout的值添加到检索消息的时间,以确定TimeNextVisible的值。

因此,您不需要编写任何用于从队列中删除消息的特殊代码。

有关更多细节,您可以参考这个文章和这个

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62333063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档