如何处理机器人上长时间运行的任务,以便客户端不会在 15 秒后再次尝试发送消息。
我有一个带有 botframework v3 的机器人,并通过直线连接客户端
The 直达专线通道连接器本身不会重试发送消息。如果它在向您的机器人发送消息后 15 秒内没有收到确认,它将抛出一个网关超时.
如果您正在使用直线客户端,您可以覆盖重试策略,确保客户端不会重试消息:
DirectLineClientCredentials creds = new DirectLineClientCredentials(directLineSecret);
DirectLineClient directLineClient = new DirectLineClient(new Uri("https://directline.botframework.com"), creds);
directLineClient.SetRetryPolicy(new Microsoft.Rest.TransientFaultHandling.RetryPolicy(new Microsoft.Rest.TransientFaultHandling.HttpStatusCodeErrorDetectionStrategy(), 0));
如果您有一个长时间运行的进程(需要超过 15 秒),请考虑将消息排队到某处,以便您可以立即确认调用,然后在后台线程上处理消息。这在概念上称为主动消息传递。更多信息可以在这里找到:https://learn.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-proactive-messages?view=azure-bot-service-3.0
编辑:这篇博文还解释了一种在机器人中处理长时间操作的方法,即使用 Azure 队列存储和 Azure 函数来处理操作并在完成后调用机器人:管理长期运行的操作
另一种选择是在后台线程上处理传入消息或长时间处理消息。该实验示例演示了使用此设计的一些方法:立即接受机器人
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)