关于Solace属性何时有效的困惑

时间:2019-03-27 19:37:37

标签: java docker jms solace

我们有一个在docker容器中运行的慰藉经纪人。当我们创建一个JNDI Connection Factory时,有一些默认属性,例如

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

以此类推

当我们使用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);

但是,在应用程序运行时和建立连接时,看来我在客户端设置的这些属性无效。具体来说,我可以通过停止docker慰藉的docker容器并查看它是否尝试重新连接3次来进行测试,这恰好是默认值在代理方。

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

2 个答案:

答案 0 :(得分:1)

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

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

enter image description here

答案 1 :(得分:0)

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

如果打开API调试,则应该能够看到从哪里获取了哪个值。

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