asp.net-core - 为什么使用 Azure 服务总线更新到 .NET 5 后 Rebus.Send 不起作用
问题描述
我们有一个使用 Rebus 和 Azure Service Bus 运行的 .net core 3.1 Web 项目。
更新到 .NET 5 后,我们无法再使用 Rebus 将消息发送到 Azure 服务总线队列。没有进行代码更改,仅更新到 .NET 5 和最新的 Rebus-packages(6.6.1)。
var contractMessage = _manager.GetContractMessage();
await _bus.Send(contractMessage);
这抛出:
Exception
Rebus.Exceptions.RebusApplicationException: Could not send to queue 'sbq-queue-queue1'
---> System.InvalidOperationException: Operation is not valid due to the current state of the object.
at Microsoft.Azure.ServiceBus.Core.MessageSender.OnSendAsync(IList`1 messageList)
at Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func`1 operation, TimeSpan operationTimeout)
at Microsoft.Azure.ServiceBus.RetryPolicy.RunOperation(Func`1 operation, TimeSpan operationTimeout)
at Microsoft.Azure.ServiceBus.Core.MessageSender.SendAsync(IList`1 messageList)
at Rebus.AzureServiceBus.AzureServiceBusTransport.<>c__DisplayClass36_0.<<GetOutgoingMessages>g__SendOutgoingMessagesToDestination|3>d.MoveNext()
--- End of inner exception stack trace ---
at Rebus.AzureServiceBus.AzureServiceBusTransport.<>c__DisplayClass36_0.<<GetOutgoingMessages>g__SendOutgoingMessagesToDestination|3>d.MoveNext()
--- End of stack trace from previous location ---
at Rebus.AzureServiceBus.AzureServiceBusTransport.<>c__DisplayClass36_1.<<GetOutgoingMessages>g__SendOutgoingMessages|1>d.MoveNext()
--- End of stack trace from previous location ---
at Rebus.Transport.TransactionContext.InvokeAsync(Func`2 actions)
at Rebus.Transport.TransactionContext.Complete()
at Rebus.Bus.RebusBus.InnerSend(IEnumerable`1 destinationAddresses, Message logicalMessage)
at Rebus.Bus.RebusBus.Send(Object commandMessage, IDictionary`2 optionalHeaders)
at xx.xx.xx.xx.xx.someclass.request.mediatrHandler.Handle(ClassRequest request, CancellationToken cancellationToken) in /home/vsts/work/1/s/xx.xx.xx/Application/xx/xx/xxRequest.cs:line 187
奇怪的是,这似乎在本地调试时有效,但在生产服务器上无效,生产服务器是运行 IIS 的天蓝色虚拟机。与在 IIS 中进行本地测试时相同的托管包。
为了连接到 ASB,我尝试了托管标识和完整连接字符串。
使用包:
Rebus 6.6.1
Rebus.AzureServiceBus 9.0.5
Rebus.Serilog 6.0.0
Rebus.Serviceprovider 6.4.1
并在 ConfigureServices 中设置 Rebus:
services.AddRebus((options, serviceProvider) => options
.Logging(l => l.Serilog())
.Transport(t => t.UseAzureServiceBusAsOneWayClient(configuration["RebusConfig:AzureServiceBusConnectionString"]))
.Routing(r => {
r.TypeBased().MapAssemblyOf<Contract1>(configuration["RebusConfig:Routes:Route1"])
.MapAssemblyOf<Contract2>(configuration["RebusConfig:Routes:Route2"]);
})
);
解决方案
在将 Microsoft Azure 包更新到最新版本并将连接切换到所有 azure 服务的新 DefaultAzureCredentials() 后,此问题自行解决。
推荐阅读
- javascript - 是否可以在 Antd 模态标题中添加按钮?
- .htaccess - Mod Rewrite 的 Apache 问题所有 POST 在重写之前已被重定向到 R=501 的 GET
- oracle - Oracle,检查一行是否有更改,然后在数据发生更改时更新
- javascript - 在角度 12 中多次调用 document.readystatechange?
- activemq - ActiveMQ XStream ForbiddenClassException
- javascript - 文本区域大小随浏览器而变化
- visual-studio-code - VSCode cppdbg 在使用“customLaunchSetupCommands”时丢失了选项“args”
- html - 如何修复页脚与部分重叠
- arrays - 如何在 tableView 中显示嵌套的 JSON 数据
- jmeter - 性能测试中“每秒事务数”与“每秒请求数”有什么区别?