gpt4 book ai didi

azure - Rebus - 将延迟消息发送到另一个队列(Azure ServiceBus)

转载 作者:行者123 更新时间:2023-12-02 07:11:30 24 4
gpt4 key购买 nike

我有一个网站和一个网络作业,其中该网站是单向客户端,而网络作业是工作人员。

我对队列使用 Azure ServiceBus 传输。

我收到以下错误:

InvalidOperationException: Cannot use ourselves as timeout manager because we're a one-way client

当我尝试从网站总线发送 Bus.Defer 时。

既然 Azure Servicebus 内置了对 timeoutmanager 的支持,那么这个工作事件不应该来自单向客户端吗?

关于 Bus.Defer 的文档说:通过附加 header 并将其传递到配置的超时管理器端点来推迟消息的传递 ///(默认是我们自己)。当时间合适时,延迟的消息将返回到 header 指示的地址。”

我可以通过设置 ReturnAddress 来解决这个问题吗:

headers.Add(Rebus.Messages.Headers.ReturnAddress, "webjob-worker");

最佳答案

Could I fix this by setting the ReturnAddress like this: headers.Add(Rebus.Messages.Headers.ReturnAddress, "webjob-worker");

是的:)

问题是这样的:当你使用 Rebus awaitbus.Defer 一条消息时,它默认将消息返回到发送者的输入队列。

当您是单向客户端时,您没有输入队列,因此在超时后您无法接收消息。

设置返回地址可以解决这个问题,尽管我承认该解决方案并不完全优雅。如果 Rebus 在其路由 API 上有一个 Defer 方法,那么一个更好的 API 将会是这样,可以这样调用:

var routingApi = bus.Advanced.Routing;

await routingApi.Defer(recipient, TimeSpan.FromSeconds(10), message);

但不幸的是目前没有该方法。

总结一下:是的,在延迟消息上显式设置返回地址使得单向客户端能够延迟消息。

关于azure - Rebus - 将延迟消息发送到另一个队列(Azure ServiceBus),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com