【问题标题】:XA context for immutant listener不变侦听器的 XA 上下文
【发布时间】:2016-05-27 05:29:03
【问题描述】:

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

【问题讨论】:

  • 嗨。所以因为我看到了 :host 选项,我假设你正在尝试连接到一个单独的 JVM 中的 HornetQ 实例:你能告诉我那个 JVM 吗?具体来说,它运行的是哪个版本的 HornetQ?另外,什么版本的 Immutant?谢谢!

标签: clojure hornetq immutant


【解决方案1】:

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

【讨论】:

  • 嗨,吉姆,在回答你上面的问题时,我使用的是 HornetQ 服务器版本 2.5.0.SNAPSHOT(Wild Hornet,124),并且在 clojure 空间中,我正在拉入 [org.immutant/immutant ” 2.1.4"] 依赖。唉,我的生产用例是一个远程队列,在我的示例中使用 localhost 就是我在本地测试它的方式。非常感谢您提供错误报告和补丁,非常感谢。
猜你喜欢
  • 2010-11-26
  • 2012-08-29
  • 1970-01-01
  • 2014-09-03
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
相关资源
最近更新 更多