【问题标题】:Confusion about when Solace properties are effective关于 Solace 属性何时有效的困惑
【发布时间】:2019-03-27 19:37:37
【问题描述】:

我们有一个在 docker 容器中运行的慰藉代理。当我们创建 JNDI 连接工厂时,有一些默认属性,例如

  • 重新连接重试尝试
  • 连接重试尝试
  • 每个主机的连接重试尝试次数

等等

当我们使用 JMS 建立生产者时,我们会提供类似的属性

env.put(SupportedProperty.SOLACE_JMS_JNDI_CLIENT_ID, config.getJndiClientID());
env.put(SupportedProperty.SOLACE_JMS_PROP_SENDER_ID, config.getSenderID());
env.put(SupportedProperty.SOLACE_JMS_VPN, config.getVpn());
env.put(SupportedProperty.SOLACE_JMS_JNDI_CONNECT_RETRIES, 0);
env.put(SupportedProperty.SOLACE_JMS_JNDI_RECONNECT_RETRIES, 0);
env.put(SupportedProperty.SOLACE_JMS_JNDI_CONNECT_RETRIES_PER_HOST, 0);

但是,在应用程序运行时和建立连接时,我在客户端设置的这些属性似乎无效。具体来说,我能够通过停止 solace 的 docker 容器并看到它正在尝试重新连接 3 次来测试这一点,这恰好是代理端的默认值。

因此,问题是,如果可能的话,如何在客户端强制覆盖这些属性?在客户端设置这些属性在什么情况下会生效?

【问题讨论】:

    标签: java docker jms solace


    【解决方案1】:

    根据定义,通过 JNDI 加载 JMS ConnectionFactory 是一个两步过程:首先 API 连接到 JNDI,然后加载任何已创建的 JMS ConnectionFactory 对象。

    属性 SOLACE_JMS_JNDI_CONNECT_RETRIES(注意 JNDI)实际上是第一步的参数!它定义了联系 JNDI 的#retries。如果您想更改加载的 JMS ConnectionFactory 的定义,您需要在您的 Solace 管理员中执行此操作。例如在管理 GUI 中,如下所示。

    【讨论】:

      【解决方案2】:

      当您使用 env.put() 时,您正在尝试使用初始上下文设置 JMS 属性。 但是这些属性也可以通过 JNDI 属性文件以及命令行来设置。

      如果开启 API 调试,应该可以看到哪个值是从哪里取的。

      现在,一旦您能够与代理上的 JNDI 连接工厂进行连接,就会从代理端获取值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        • 2019-05-17
        • 2020-03-06
        • 2016-03-16
        • 2013-07-27
        • 1970-01-01
        相关资源
        最近更新 更多