代码之家  ›  专栏  ›  技术社区  ›  Mik

Microsoft Orleans中的ServiceBus,OrleanSprepareFileDexception异常

  •  1
  • Mik  · 技术社区  · 7 年前

    我正在使用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条左右的消息,但感觉有点慢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mik    6 年前

    问题是在谷物类中对国家处理不当。我同时使用了事务状态和持久状态,在这里我应该只使用一个。我设法使我的代码在奥尔良2.0版和中正确运行。Net核心应用程序。

    这是我的代码: https://github.com/mikuam/orleans-core-example 这是我关于在年向Microsoft Orleans添加持久存储的博客文章。净核心: http://www.michalbialecki.com/2018/04/03/add-cosmosdb-persistent-storage-to-microsoft-orleans-in-net-core/

    推荐文章