有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

每个客户端的java队列请求

我的后端系统服务于大约10K POS设备,每个设备将以顺序方式请求服务,但是我想知道后端如何保证以顺序方式处理给定客户机的请求

例如,一个设备发出“销售”请求,并超时(可能DB阻塞)以获得响应,因此它发出“取消”以取消该销售请求。在这种情况下,当收到“取消”请求时,后端可能仍在处理“销售”事务,这可能会导致一些意外的结果

我的想法是为每个设备(客户端)设置一个持久队列,但是设置10K队列可以吗?我不确定,请帮忙


共 (1) 个答案

  1. # 1 楼答案

    这是计算机科学中一个极其复杂的领域,许多问题已经被多次解决。我不会试图重新发明轮子

    我的忠告是:

    • 阅读并彻底理解ACID(摘要转述):
      • 原子性-如果事务的任何部分失败,则整个事务失败,并且数据库处于未知或损坏状态。这非常重要。依靠现有软件在实际数据库中实现这一点。不要发明需要你重新发明自己的交易系统的数据结构。使事务尽可能小以减少失败
      • 一致性-数据库永远不会处于无效状态。提交给它的所有操作将使它进入新的有效状态
      • 隔离-您在数据库上执行的操作可以同时执行,并产生相同的状态,就像一个接一个地执行一样在锁定事务中安全执行
      • 持久性-一旦提交了事务,它将保持不变

    您现有的系统和您提出的想法听起来都有可能违反ACID:

    • 有状态请求系统可能会违反(或很难不违反)隔离
    • 如果不以防弹的方式排队,可能会破坏耐久性

    更不用说,您还存在可伸缩性问题。结合可伸缩性ACID,您将面临需要专业知识的重量级情况

    如果你能帮上忙,我强烈建议依赖现有系统,尤其是,如果这是用于销售点的话