我正在尝试使用immutant来管理跨HornetQ和mysql的事务。正如我理解的文档,要做到这一点,我必须使用XA事务,因为我运行的是一个独立的应用程序,而不是在一个应用服务器内。
然而,当我试着设置:xa?对于我的应用程序的上下文,当绑定到安装监听器时,我会得到异常。
(ns example
(:require [immutant.messaging :as msg]))
(def capture (atom nil))
(let [ctx (msg/context :host "localhost" :xa? true)
queue (msg/queue "example" :context ctx)]
(reset! capture nil)
(msg/listen queue (fn [m] (reset! capture m)))
(msg/publish queue {:my :msg}))这会引发"java.lang.IllegalStateException:您不能从XA上下文创建子上下文。“从(msg/listen)调用。我做错了什么?
发布于 2016-05-27 19:36:23
我认为您已经发现了一个错误,但在您的例子中,我认为有一个解决办法:您只需要在队列是远程的情况下才需要:xa? true选项。您仍然可以使用HornetQ宏在侦听器处理程序中创建一个XA事务,将您的MySQL操作绑定到immutant.transactions/transaction。有关示例,请参见文档。
https://stackoverflow.com/questions/37475487
复制相似问题