点击按钮,上位机即连续发送多条指令到下位机。每发一条指令,下位机执行成功后,数据库更新一条记录,最终界面更新。
但发送指令速度较快,数据库还未做更新,实际上接收到的已经是最后一条指令了
想到的解决方案:
1.将接收到的数据放到list中,接完再更新数据库,待测试
2.更新时开个task任务,有改善,但最多也只能更新到最后2条
其实答案还是跟你上个问题一样的,虽然上个问题你忽略掉队列的回答
但是回到这里,你依旧还是绕回队列了。
这里呢我们还是在扩展一下,接收后直接放入队列,另外一个东西慢慢处理队列。当然为啥要扩展呢,因为我们怕意外重启和掉电。如果你要确保数据不丢失,直接放本机内存里还是不好防止意外。所以目前行内的处理是接收后不入库,转发给kafka或者mqtt broke。然后另外的程序在去订阅处理
当然这个过程现在可以不用写代码,比如一个mqtt broke叫emqx,他有一个mysql插件。通过这个插件你只需简单配置一下就可以把你发的mqtt消息自动转发给mysql入库保存
总之:目前行业方案是既然你觉得入库慢,那就别处理直接发给一些消息中间体,然后在让消息中间体代理转存
至于UI更新,你别管数据库了。队列收到什么就是显示什么,入库过程是另外的处理过程,和显示无关。显示UI只是如实显示,入库那边mqtt broke不挂,kafaka不挂,rabiitmq不挂他自己会慢慢入库
谢谢,我采用了方案一,在Task加了一个优先级为最高,暂时解决了