【问题标题】:Bot Framework Maintaining User StateBot Framework 维护用户状态
【发布时间】:2018-03-06 11:19:14
【问题描述】:

以前我使用 Microsoft 状态服务来维护我的机器人中的用户状态。现在微软已经停止支持状态服务,我编写了一个静态对象来存储用户数据,如下所示。只是想知道这是维护用户状态的正确方法,因为可能同时有大约 8000 个用户正在使用该应用程序。我只是担心它是否会导致一些并发。请建议是否有更好的方法来维护机器人框架中的用户状态

    private static object objectLock = new object();
    public void SetBotCache(T CaceData, string userID)
    {

  _sessionData.AddOrUpdate(userID, CaceData, (key, oldValue) => CaceData);

    }

    public T GetBotCache(string userID)
    {
        lock (objectLock)
        {
            if (_sessionData.Count > 0)
            {
                return _sessionData.First(a => a.Key == userID).Value;
            }
            else
            {
               return default(T);
            }
        }
    }

    public void RemoveCache(string userID)
    {
        lock (objectLock)
        {
            T res;
            _sessionData.TryRemove(userID, out res);
        }
    }

【问题讨论】:

    标签: c# state botframework azure-language-understanding


    【解决方案1】:

    Microsoft Bot Framework 工程师为此专门提供了 BotBuilder-Azurehttps://github.com/Microsoft/BotBuilder-Azure https://www.nuget.org/packages/Microsoft.Bot.Builder.Azure/

    Bot Framework 博客还提供了有关如何设置 Azure 表存储DocumentDb(现为 CosmosDb)的说明: https://blog.botframework.com/2017/07/18/saving-state-azure-extensions/

    【讨论】:

      【解决方案2】:

      我已经编写了一个静态对象来存储用户数据,如下所示。只是想知道这是维护用户状态的正确方法,因为可能同时有大约 8000 个用户在使用该应用程序。

      您似乎自己实现了用于存储机器人用户数据的内存缓存,该方法可以用于测试目的。众所周知,内存中存储的数据是非持久化的,如果bot应用重启或崩溃,缓存中的数据会丢失,因此不建议用于生产环境。

      您说您的机器人应用程序将在生产服务器上发布,供大约 8000 名用户使用。正如 Eric Dahlvang 提到的,在生产环境中,您可以使用 Azure 扩展将您的 bot's state data 存储在表存储、CosmosDB 或 SQL 中。

      【讨论】:

        猜你喜欢
        • 2021-05-24
        • 2017-12-04
        • 1970-01-01
        • 2011-04-23
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多