ThingsBoard如何使用队列进行同步

https://thingsboard.io/docs/user-guide/rule-engine-2-5/tutorials/queues-for-synchronization/
假设您需要使用 ThingsBoard 规则引擎实现“计数器”逻辑。基本上,消息处理是在规则节点内异步执行的。因此,在大多数情况下,由于竞争条件问题,“获取当前计数器值 ->添加新的计数器值 ->保存计数器值”逻辑会导致不正确的最终结果(与您的预期不同)。对于所有处理多线程编程的人来说,这是一个众所周知的问题。您可以参考这篇文章,它很好地描述了问题和现有的解决方案。从 ThingsBoard v2.5 开始,可以使用特殊的可配置队列来解决此处理问题。
在本教程中,我们将 ThingsBoard 规则引擎配置为使用具有按发起人消息提交策略的队列。尽管此方案是虚构的,但您将学习如何使用队列以允许按顺序处理消息,并在实际应用程序中使用这些知识。

Step 1: Creating the Rule Chain

步骤 1:创建规则链

上面两个Generator作为生成器,各自生成数据,checkPoint节点可设置queue队列类型,如SequentialByOriginator,数据
我们将添加两个生成器节点,每个节点将生成 7 条消息。第一个生成器将生成计数器值为 101 的消息。第二个 - 值为 10。所以结果应该是 777。
在这里插入图片描述

这两条消息都将放入名为“SequentialByOriginator”的队列中。它使用名为“SEQUENTIAL_WITHIN_ORIGINATOR”的消息提交策略(有关详细信息,请参阅配置指南),这意味着当基于发起方确认前一条消息(从队列中处理并删除)时,后续消息将开始被处理。

We will get the present “counter” value using “Originator Attributes” node.
我们将使用“Originator Attributes”节点获取当前的“counter”值。

The calculations will be done using “Counter Script” node.
计算将使用“计数器脚本”节点完成。
在这里插入图片描述

The last step will be to save the new counter value using “Save Attributes” node.
最后一步是使用“保存属性”节点保存新的计数器值。

Step 2: Validation the Rule Chain logic

第 2 步:验证规则链逻辑
Let’s check that our logic is correct by saving the Rule Chain. The generators will automatically produce 14 messages:
让我们通过保存规则链来检查我们的逻辑是否正确。生成器将自动生成 14 条消息:
在这里插入图片描述

The final counter value that is persisted for a device is:
为设备保留的最终计数器值为:

That means that our logic works correctly.
这意味着我们的逻辑是正常工作的。

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值