- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 BotKit 开发机器人,现在我们尝试以最少的部署停机时间解决问题。
该服务器上运行着服务器和 docker 容器。在容器内运行与 RTM-server (Slack) 连接的 bot-app 实例。
当我开始部署机器人应用程序的新版本 (v2) 时,我希望停机时间为零,用户不应看到“机器人离线”。
部署脚本使用新版本的 bot-app 运行第二个 docker 容器。并且 bot-app 也连接到 RTM-server。通过这种方式,当两个应用程序运行、连接到 RTM 服务器并响应用户命令时,有几秒钟的时间(并且用户将看到他的命令的两个答案)。
如果一方面我们希望获得零停机时间,另一方面我们希望防止用户同时与两个实例交互,我可以得到什么最佳决策?
决定 1:
当两个实例都响应用户命令时,允许发生碰撞的可能性很小。
决定 2:
放弃零停机部署。在这种情况下,部署脚本首先停止第一个 docker-container,然后再启动另一个。该应用程序不会响应在停止当前版本的应用程序和完全启动新版本的应用程序之间发送的用户命令。
决定 3:
通过并行运行当前和新版本的应用程序或互斥锁的交互。一般示意图:
1) 当前版本的应用程序正在运行
2)部署脚本启动新版本的应用程序
3)当新版本的应用程序几乎运行并准备连接到RTM服务器时,它发送到当前版本的应用程序命令以关闭RTM连接。
4) 当前版本的应用程序关闭了 RTM 连接
5) 新版app开放RTM-connection
我认为还有其他好的解决方案。
您将如何在您的应用程序中解决这个问题?
最佳答案
(抱歉第二次回复;有另一个想法。)
我之前描述的方法会对您现有的代码造成很大的破坏,因为您可能需要停止使用 botkit(或者至少不要使用它来进行 RTM API 通信)。一种可能不那么具有破坏性的方法是使用某种外部方式来表示给定的消息已经被处理。
例如,使用 Redis,让机器人在收到消息时执行以下命令:
SET message:<message timestamp> 1 NX PX 30000
NX
选项意味着此命令仅在 key 不存在时才会成功。因此,设法执行此操作的机器人的第一个实例将成功,而另一个实例将失败。如果此命令成功,机器人应该只处理消息并响应。
PX 30000
设置了 30 秒的过期时间,因此 Redis 不会装满这些键。)
SET
命令之后但在实际处理消息之前死亡。)具有两阶段“获取/删除”的真实队列会更好,但随后您又回到了我的另一个答案。 :-)
关于deployment - Slack bot 的零停机部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669664/
因此,我想创建一个 bot/incoming webhook 来读取群组中的所有消息并将其复制到电子表格中。我在这里要问的是,机器人或传入的 webhook 可以读取整个群组消息吗?在 google
我正在使用 Microsoft Bot Framework 开发一个机器人,在该机器人中,机器人将通过向用户发送一些图像来响应。我用 slack 和 skype 配置了它。 在 slack 中图像正在
我试图让我的机器人与用户开始对话,但我不知道应该从代码中的哪个位置发送消息。启动 convo 的文档在这里,但不是很有帮助:http://docs.botframework.com/connector
我正在创建 Telegram Bot 。我需要跟踪添加用户和添加用户的时间。我如何使用 Telegram API 来做到这一点? 最佳答案 在使用 Telegram API 的群组中,您可以调用 ne
我已经创建了几个 Telegram 机器人。它们适用于我的帐户,也适用于我测试过的其他几个帐户。 但我收到一些用户的报告,称机器人从不响应。 是否有一些用户设置会阻止帐户从机器人获取消息?或者任何其他
如果在一段时间内没有用户输入,我有一个关于取消提示或对话框的问题。 我需要一种方法来以某种方式在提示中超时。 Example: Bot prompts the user: "How old are y
我有一个用例,当我的机器人需要在一天中的特定时间向用户发送消息时。假设每天早上 6 点。 我正在使用预定的 azure Webjob 发送这些消息。消息将在 Slack 和 Skype 客户端中传递。
我是 Microsoft bot 的新手。我的公司有自己的通信应用程序,我想将我的机器人与通信应用程序连接起来,我的客户可以在我公司的通信应用程序上使用我的机器人。我读到它需要使用 Direct Li
我在 sdk V4 Bot 中实现了一个中间件来拦截 bot 和用户之间的每条消息并记录该自定义 mongo Db。我正在尝试为使用 SDK v4 构建的 Bot 实现类似的概念。看起来我可以使用以下
我对编程和学习还很陌生。我认为制作一个不和谐的机器人是一种很好的学习方式,我很享受,只是有点卡住了。所以我的机器人是私有(private)的,我们的不和谐服务器中有一个正在运行的笑话,每当用户发送“k
如何让机器人假装它正在输入消息? 当机器人假装输入时,聊天中会出现以下文本: 我使用 python aiogram框架,但对 native Telegram API 的建议也会有所帮助。 最佳答案 我
我有一个像这样的 Telegram Bot : 通过 webhook 获取更新 语言:C#(我也欢迎其他语言的回答) 我们有以下用户场景: 向机器人发送/MyPhoto a_parameter命令 向
我加入了一个 Telegram Bot ,但我不知道它的所有者。是否可以找到 Telegram Bot 的所有者? 最佳答案 根据 Telegram MTProto protocol 不可能看到 Te
我已经创建了一个电报机器人并按照文档中的描述设置了一个 webhook。出于测试目的,我已经设置了它,因此一旦您向机器人发送一条消息,它就会用相同的消息回复。 现在我遇到的问题是来自电报的更新非常缓慢
是否可以将位置从 Telegram 发送到 Bot,这是在 Bot Framework 中制作的? 我将我的位置从我的 Telegram 帐户发送到我的 Bot,但服务器没有收到它们(我没有收到回复)
我在 Telegram 上创建了一个组并创建了一个机器人并添加进来。 我正在尝试向我创建的组发送消息,错误如下所示 {"ok":false,"error_code":403,"description"
使用 Microsoft Bot Framework V3 我开始使用登录卡。 我从示例代码页做了一个简单的剪切并粘贴到我的代码中,假设它有效(编译): https://docs.botframewo
当用户刚刚打开聊天时,机器人如何向用户发送消息。 例子: 用户已经添加了 Telegram bot到他的联系人列表并开始对话 稍后,用户打开与该机器人的聊天窗口 机器人“看到”该用户已打开聊天窗口,但
将 XCode 更新到版本 11.4 (11E146) 后,我不再在机器人设置中看到存储库分支。但是我在 Source Controll Navigator 中看到了这些存储库分支。有谁知道我该如何解
我想将机器人的位置发送给用户,我在谷歌上搜索了很多,但我发现只有这种情况“将用户的位置发送给机器人”我想要相反的情况,意思是:“发送机器人的位置给用户”。这是我的想法:机器人的所有者是一个司机,他想与
我是一名优秀的程序员,十分优秀!