在我们的后端,有几个服务通过JMS与Apache ActiveMQ发送和接收消息。每个服务都有一个到ActiveMQ代理的会话。我们现在想要做以下(伪代码):使用与JMS(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()
}
的承诺obviuosly有阻塞,直到答案到达或交易failes 。服务s2也应该有可能创建一个新的嵌套事务,因为s2正在向另一个服务发送消息。如何使用ActiveMQ的事务来实现这种行为?有一些示例可用,但在这些示例中,事务仅用作发送消息的批处理机制。
您是否期待一项交易包含在s1和s2中完成的工作? – djna 2012-02-20 08:49:32
是的,如果s2失败,则交易在s1中失败。 – problemzebra 2012-02-20 12:08:05