我正在使用Microsoft Orleans for。net Core和我正在尝试接收ServiceBus消息并尽可能快地处理它们。
参数MaxConcurrentCalls设置为2时,一切正常。但对于集合10或集合30,它会引发一个异常:
OrleanSprepareFileDexception,事务50038中止,因为准备阶段未成功
at系统。运行时。例外服务。例外DispatchInfo。投掷()
at系统。运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务任务)
在MichalBialecki。com。OrleansCore。账户转账。客户程序<&燃气轮机;c\u DisplayClass4\u 0<b\u 0>d、 MoveNext()
代码如下所示:
subscriptionClient.RegisterMessageHandler(
async (message, token) =>
{
var messageJson = Encoding.UTF8.GetString(message.Body);
var updateMessage = JsonConvert.DeserializeObject<AccountTransferMessage>(messageJson);
await client.GetGrain<IAccountGrain>(updateMessage.From).Withdraw(updateMessage.Amount);
await client.GetGrain<IAccountGrain>(updateMessage.To).Deposit(updateMessage.Amount);
await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
},
new MessageHandlerOptions(async args => Console.WriteLine(args.Exception + ", stack trace: " + args.Exception.StackTrace))
{ MaxConcurrentCalls = 30, AutoComplete = false });
我的情况很简单。它处理帐户转移消息,并在更新帐户(谷物)余额后,将消息发送到不同的ServiceBus主题。目前在我的本地机器上,它每分钟可以处理1500条左右的消息,但感觉有点慢。