- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一项服务,它使用来自 Microsoft.Azure.ServiceBus
的 MessageReceiver
连续监听 ServiceBus 中的订阅。当服务停止时,我想在进程被终止之前给所有操作完成的机会。
这是我根据 example 使用的代码图书馆提供:
private async Task StartReceiveLoop(IMessageReceiver receiver, CancellationToken cancellationToken)
{
var doneReceiving = new TaskCompletionSource<bool>();
cancellationToken.Register(() =>
{
receiver.CloseAsync();
doneReceiving.SetResult(true);
});
receiver.RegisterMessageHandler(
async (message, ct) => await HandleMessage(receiver, message),
new MessageHandlerOptions(HandleException));
await doneReceiving.Task;
}
在服务停止时,即使 HandleMessage
仍在运行,我也会取消任务并立即终止服务。
有什么方法可以通过库本身检查操作是否仍在运行以延迟任务取消?我可以想出一种方法,通过锁定所有正在运行的任务来进行自己的计数,但我希望有更好的方法可以让我知道正在运行的处理程序的数量。
理想情况下,我想取消注册处理程序,以便消息泵停止,而接收器本身不会关闭以允许例如CompleteAsync 调用。
最佳答案
如MessageReceiver.CloseAsync()提及如下:
Closes the Client. Closes the connections opened by it.
根据我的测试,在调用 MessageReceiver.CloseAsync()
后,后续调用 CompleteAsync
,DeadLetterAsync
将失败,因为 实例>IMessageReceiver
已被处置。如果您仍想完成队列消息,则需要创建一个新的 MessageReceiver
。
Is there any way that I can check via the library itself that the operation is still running to delay task cancellation?
据我所知,该SDK目前不提供上述功能。而且,这里有一个类似的feedback关于优雅地关闭 Azure 服务总线的消息泵。
When the service is stopped I would like to give a chance for all operations to complete before the process is killed.
对于您的需求,我假设您需要自己实现它,以确保即使在 MessageReceiver 关闭后也能成功处理接收到的队列消息。或者,您可以将 CancellationToken
参数传递到 HandleMessage
方法中以显式取消,而不是完成检索到的消息。
关于c# - 如何确保MessageHandler委托(delegate)在MessageReciever关闭期间完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50943534/
我想将 JavaScript 变量传递给 Swift。我在 JavaScript 中遇到错误并搜索它,但没有得到任何结果。错误是: TypeError: Cannot read property 'm
我正在使用 Symfony Messenger,我想在处理程序中继续发送消息,直到它被发送多次。 我怎样才能跟踪它? 到目前为止,这是我的处理程序类的代码: class RetryTestHandle
我面临以下问题,但尚未找到有效的解决方案。我有 3 个不同的应用程序,它们应该相互通信: 用户界面部分(1) 后端应用程序(2) “云端”微服务(3) 后端应用程序为 UI 提供 Web 服务 (RE
我想通过拆分并行处理项目列表,将每个项目路由到它们适当的网关并聚合结果。但是,我的应用程序没有启动,出现以下错误: BeanCreationException: The 'currentCompone
我们有一组在 JAX-WS 中实现的 Web 服务和一个在 SOAP header 中添加控制属性的 SOAPHandler。今天,我们需要在我们创建的每个新服务中添加 @HandlerChain 注
我如何从 MessageHandler 中检索 ActionDescriptor? 我可以使用以下代码在 SendAsync 方法中获取 ContractDescriptor: var config
我正在尝试使用 IdempotentReceiverInterceptor 来防止我的集成流发出它已经生成的消息。但是,IdempotentReceiverInterceptor#invoke 似乎只
Tomcat 8.0.21 这个有效: session.addMessageHandler(new MessageHandler.Whole() { @Override
我试图通过事件从 web View 中执行 android 中的代码。所以我用 JavascriptInterface 实现了一个好方法,但是因为我有一个 iOS 应用程序,所以我想使用相同的方法。那
更新:错误在于使用 Action onSuccess对于实际任务并在没有 await 的情况下调用它。我们实际上正在传递一个 async回调作为 onSuccess ,因此它不会阻塞,它只是被解雇而不
在我的 pdf 中,在我的 onOpenAction 中,我有这个 js 代码: app.alert(this.hostContainer); try { this.hostContainer.
我花了相当多的时间试图弄清楚如何导入和使用来自 spring 框架 的 MessageHandler 接口(interface)。以下是我使用 IntelliJ Idea IDE 所做的事情: imp
我有一个简单的 Spring Integration 配置可以工作 @Configuration public class FTPIntegration { @Bean public MessageC
我有一个疯狂的问题。我对按钮、richedits、复选框进行了子类化,.. 一切似乎都工作正常。但是在我对 trackbar 进行子类化之后,我现在遇到了一些麻烦。问题是我的子类消息处理程序没有收到
我正在使用 WKWebView,我正在加载要显示的网页 (React)。但是我的 didFinish 触发得太早了。因此,当我的代表通知 didFinish 时,在加载实际数据之前,我只会看到几秒钟的
我正在使用 PDF.JS 加载 pdf。加载pdf时,我收到此错误, ERROR Error: Unknown action from worker: undefined at Worker.
是否可以仅为使用路由属性的特定 Controller 添加 MessageHandler? 如果它不包含某些 header ,我想在管道中更早地切断请求。我想要 提到: 我不能在 WebApiConf
我正在尝试使用 DSL 测试一些带有 spring-integration 的东西。到目前为止这只是一个测试,流程很简单: 创建一些消息 并行处理(记录)它们 聚合它们 记录聚合 除了聚合器,它工作正
我成功地将 Autofac 连接到我的 ASP.NET WebAPI 项目中,现在我想知道如何能够解析我的 MessageHandler 中的服务。 由于必须在应用程序启动时添加 MessageHan
我正在努力处理 Spring-WS 项目。 在我的 Endpoint 类中,如果我没有指定我正在接收/返回 JAXBElement,我会收到以下错误:No adapter for endpoint;您
我是一名优秀的程序员,十分优秀!