我有一个产生独特消息的 JMS主题。
而且我在n台机器(客户端)上部署了一个简单的 webapp,它所做的就是将使用的 msg 放入另一个系统(目标系统)。
笔记:
- 我无法控制 JMS。
- 我确实可以控制客户。
- 我无法控制将由客户端接收消息的目标系统。
我的问题是:
如何确保消息被其中一个客户端写入一次(到目标系统),并且永远不会被另一个客户端再次写入(好像 JMS 是队列而不是主题),知道每个 msg 都有一个 uniqueId?
我正在考虑两种解决方案:
创建另一个从该主题消费的 JMS 队列,并且该队列将由n 个客户端之一为每个 msg 消费一次。
有某种共享位置(memcache),其中包含已使用 msgs 的消息 ID,并且在客户端将已使用 msg 发送到目标系统之前,我必须检查共享存储(memcache)之前是否具有此 ID,如果然后不发送到目标系统。
你怎么看?
更新:
最终得到消息的系统不是 RDBMS,甚至不在我的控制之下。我只是将一些味精从一个系统传送到另一个系统。(实际上是 Apache Flume 不受我控制)