每个客户端的队列请求

时间:2013-09-30 07:11:03

标签: java message-queue

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

例如,设备发出“卖出”请求,并超时(可能会阻止数据库)以获得响应,因此它会发出“取消”以取消该销售请求。在这种情况下,当获得“取消”请求时,后端可能仍在处理“销售”交易,这可能会导致一些意外结果。

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

1 个答案:

答案 0 :(得分:0)

这是一个非常复杂的计算机科学领域,很多时候已经解决了很多这些问题。我不会试图重新发明轮子。

我的建议:

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

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

  • 有状态请求系统可能违反(或使其难以违反)隔离。
  • 如果没有以防弹的方式完成,队列可能会违反持久性。

更不用说,您也有可扩展性问题。结合可扩展性 ACID ,您需要具备严谨的专业知识。

如果您可以提供帮助,我会强烈建议依赖现有系统,尤其是,如果这是针对销售点的。