java - MongoDB 和 RabbitMQ 之间的一致性

标签 java mongodb rabbitmq

我正在编写一个系统,该系统将利用 Mongo 实现持久性,利用 RabbitMQ 进行消息总线/事件队列,并且我正在尝试找出在发布端应对故障的最佳方法。

我能想到三种情况:

  1. 一切正常 - 一致
  2. 一切都失败了 - 一致
  3. 部分有效,以较晚发生的为准已过时 - 不一致

最后一个案例是我感兴趣的,我很想知道其他人如何解决这个问题,因为 XA 不是一个选项(而且我也不希望有性能开销)。

我能想到几个解决方案:

  1. 向 Mongo 文档添加“lastEvent”(或类似的)字段。定期扫描lastEvent
  2. 在 Mongo 中持久化之前在 Rabbit 中触发事件,并允许安全处理可能未实际发生的事件(真的不喜欢这种方法)

其他人能否阐明如何跨持久层和消息总线提供某种一致性?

最佳答案

1 从来都不是一个好主意,一旦引入多线程或多进程系统,并且当生成该“时间”时,“最后 X 时间”的概念就会失效(如果某些请求比其他请求需要更长的时间来处理,那么“稍后”时间可能会在“较早”时间之前写入持久存储)

2 基本上是 Idempotence ,如果做得正确,这种模式非常适合设计容错系统

关于java - MongoDB 和 RabbitMQ 之间的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057912/

相关文章:

java - Java 中的最小 OpenGL 示例

java - CMD:如何将 java -version 的结果写入/打印到某个文件

java - 随机爬山法

java - MySQL 数据未显示在 Android RecyclerView 中(Logcat 错误 : Couldn't load memtrack module)

mongodb - 如何重启 MongoDB 服务器并关闭 Cloud 9 上的终端

javascript - bson的javascript/javascriptwithscope类型有什么用

python - 鼠兔与 celery ,连接已关闭

node.js - 我可以在 node.js 中指定 RabbitMQ 凭据吗?

node.js - 如何对数组mongodb聚合执行多个$lookup

docker - 无法从客户端连接到 dockerizedrabbit