0

我正在尝试使用 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) 调用。我究竟做错了什么?

4

1 回答 1

1

我认为您已经发现了一个错误:xa? true,但在您的情况下,我认为有一个解决方法:如果您的队列是远程的,您只需要该选项。您仍然可以使用immutant.transactions/transaction宏在侦听器处理程序中创建将 HornetQ 操作绑定到 MySQL 的 XA 事务。有关示例,请参阅文档。

于 2016-05-27T19:36:23.777 回答