【发布时间】:2012-03-10 14:56:31
【问题描述】:
在我们的后端,有几个服务通过 JMS 和 Apache ActiveMQ 发送和接收消息。每个服务都有一个与 ActiveMQ 代理的会话。我们现在要执行以下操作(伪代码):
服务 s1:
Message m = createMessage("s2","Hello World")
sendMessage(m)
try {
Message answer = commit()
...
} catch (TransactionFailedException e){
...
}
服务 s2:
onMessageReceive:
try {
Message m = getReceivedMessage()
Message answer = doSomeStuff()
send(answer)
} (Exception e) {
rollback()
}
提交显然必须阻塞,直到答案到达或事务失败。服务 s2 也应该有可能创建一个新的嵌套事务,因为 s2 正在向另一个服务发送消息。如何使用来自 ActiveMQ 的事务来实现这种行为?有一些可用的示例,但在这些示例中,事务仅用作发送消息的批处理机制。
【问题讨论】:
-
您是否希望单个事务包含在 s1 和 s2 中完成的工作?
-
是的,如果 s2 失败,事务应该在 s1 中失败。
标签: transactions jms activemq middleware