消息队列提供事务支持?

时间:2010-01-01 15:00:25

标签: java

假设我从多个节点加载队列中的消息。

然后,一个或多个节点正在从队列中提取消息。

队列是否可以(或正常使用?)保证不向多个服务器/节点分发消息?

该服务器/节点是否必须告知队列已完成操作和队列并删除消息?

3 个答案:

答案 0 :(得分:2)

您使用的是哪种消息/排队技术? AMQP当然可以保证这种行为(包括发布/子模型在内的许多其他行为)

答案 1 :(得分:2)

消息排队系统不能保证将给定消息分发给一个接收者,这不值得使用。某些消息队列系统具有事务控制。在这种情况下,如果一个接收者收集消息作为事务的一部分,但接收者没有提交事务(并且消息队列可以识别原始接收者不再可用),那么它将被重新发布。但是,该消息不会同时对两个进程可用。

答案 2 :(得分:0)

如果您希望在Java中使用它 - 那么符合JMS的消息传递系统将执行您想要的操作 - 并且大多数消息传递系统都具有JMS客户端。你也可以使用Spring的JmsTemplate来实现易用性。

使用JMS - 来自队列的消息将仅由一个且仅一个客户端使用 - 一旦被消费(确认) - 它将从消息传递系统中删除。此外,当您使用JMS发布消息时 - 如果它是持久性的 - 它将同步发送,并且send()方法将不会返回,直到消息存储在代理的磁盘上 - 这很重要 - 如果您不想在发生故障时冒着丢失消息的风险。

相关问题