6.6. 配置动态发现
您可以配置 AMQ 核心协议 JMS,在尝试建立连接时发现代理列表。
如果您在客户端上使用 JNDI 来查找您的 JMS 连接工厂实例,您可以在 JNDI 上下文环境中指定这些参数。通常,参数在名为 jndi.properties 的文件中定义。连接工厂的主机和部分应与代理 broker.xml 配置文件中的对应 broadcast-group 中的 group-address 和 group-port 匹配。以下是配置为连接到代理发现组的 jndi.properties 文件示例。
java.naming.factory.initial = ActiveMQInitialContextFactory
connectionFactory.myConnectionFactory=udp://231.7.7.7:9876
当此连接工厂由客户端应用从 JNDI 下载并且从其中创建 JMS 连接时,这些连接将在发现组通过侦听代理发现组配置中指定的多播地址的服务器列表中进行负载均衡。
作为使用 JNDI 的替代方案,您可以在创建 JMS 连接工厂时直接在 Java 代码中指定发现组参数。下面的代码提供了一个如何执行此操作的示例。
final String groupAddress = "231.7.7.7";
final int groupPort = 9876;
DiscoveryGroupConfiguration discoveryGroupConfiguration = new DiscoveryGroupConfiguration();
UDPBroadcastEndpointFactory udpBroadcastEndpointFactory = new UDPBroadcastEndpointFactory();
udpBroadcastEndpointFactory.setGroupAddress(groupAddress).setGroupPort(groupPort);
discoveryGroupConfiguration.setBroadcastEndpointFactory(udpBroadcastEndpointFactory);
ConnectionFactory jmsConnectionFactory = ActiveMQJMSClient.createConnectionFactoryWithHA
(discoveryGroupConfiguration, JMSFactoryType.CF);
Connection jmsConnection1 = jmsConnectionFactory.createConnection();
Connection jmsConnection2 = jmsConnectionFactory.createConnection();
刷新超时可以使用 setter 方法 setRefreshTimeout() 直接在 DiscoveryGroupConfiguration 上设置。默认值为 10000 毫秒。
在首次使用时,连接工厂将确保它在创建此时间之后再创建第一个连接前等待。默认等待时间为 10000 毫秒,但您可以通过将新值传递给 DiscoveryGroupConfiguration.setDiscoveryInitialWaitTimeout() 来更改。