【问题标题】:Generic JMS Client通用 JMS 客户端
【发布时间】:2011-04-25 14:43:52
【问题描述】:

有谁知道编写通用 JMS 客户端是否可行 - 即。与来自不同供应商(例如 Sonic、IBM SIB、Jboss 等)的 JMS 一起使用的一种?

每次我编写 JMS 客户端代码时,它总是非常依赖于依赖 JAR 和上下文类的实现。

谢谢。

【问题讨论】:

    标签: java jms


    【解决方案1】:

    嗯,一个最佳实践(至少对我来说)是使用非参数 InitialContext constructor 并将提供者特定的东西(如初始上下文工厂和提供者 url)放在类的 jndi.properties 文件中路径而不是硬编码这些东西。您还需要将“正确的”JMS 提供程序 JAR 放在类路径上。 换句话说,您可以拥有通用代码,但您仍然需要配置运行时环境(除非您在像 Spring 这样的容器中运行客户端代码)。

    【讨论】:

      【解决方案2】:

      已经有 2 个很好的答案,但我想补充一点解释。 JMS 是一个 API 标准,它没有定义到服务器的有线协议。因此,所有 JMS 实现都有不同的有线协议——因此您总是需要特定于供应商的 JAR。创建与所有 JMS 提供者兼容的 JMS 客户端库是不可能的。
      在您的源代码中,您应该避免使用特定于供应商的功能(例如,TIBCO EMS 允许您使用非 JNDI、本地名称访问目标,并且它具有自定义确认模式)。如果您总是使用 JNDI 查找,那么只有 JNDI URL 和初始上下文工厂名称将特定于服务器类型。

      【讨论】:

        【解决方案3】:

        这就是Spring 的用途。您将拥有特定于供应商的实现,但代码应该相同。参见Spring 3.0 Reference 的19.6 JMS 和21. JMS (Java Message Service)。

        【讨论】:

          【解决方案4】:

          对于将来寻找通用客户端的任何人,请尝试使用主要 JMS 提供程序(ActiveMQ、WebSphere MQ 等)的插件随附的 HermesJMS

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-15
            • 1970-01-01
            • 2016-10-31
            • 1970-01-01
            • 1970-01-01
            • 2013-02-05
            相关资源
            最近更新 更多