跳到主要内容

建立连接

本节描述了 JMS 客户端如何建立 Java 命名和目录接口(JNDI)以及 JMS 数据连接。它还描述了已连接客户端如何建立一个会话,通过该会话,JMS 客户端可以生产和消费消息。

使用JMS管理对象

使用 Solace JMS 实现的客户端应用程序可以查找所需的 JMS 管理对象,这些对象存储在 JNDI 存储库中,也可以通过编程方式创建它们,以避免依赖 JNDI 服务。

  • 使用 JNDI
  • 通过编程方式创建 JMS 管理对象

使用JNDI

Solace 的 JMS API 实现符合 JNDI 标准。当 JMS 客户端获取 JNDI 服务时,它们可以在事件代理提供的 JNDI 存储库或远程主机上的基于 LDAP 的 JNDI 存储库中查找 Solace 的连接工厂(ConnectionFactory)、XA 连接工厂(XA Connection Factory)、队列(Queue)和主题(Topic)对象的实现。

JMS 客户端可以通过通用名称使用 JNDI 服务查找 JMS 管理对象。为了获取 JNDI 服务,JMS 客户端必须向初始上下文构造函数传递一组环境属性,该构造函数用于提供 JNDI 服务。

环境属性必须提供 Solace JMS 的默认 InitialContextFactory 实现(com.solacesystems.jndi.SolJNDIInitialContextFactory)的完全限定类名,以创建初始上下文。还可以通过环境可选配置一些标准和 Solace 定义的属性。(有关可以通过环境设置的属性的信息,请参阅 JMS 属性参考。)

InitialContext 提供了一个网络连接到 JNDI 存储库,从中可以查找 JMS 管理对象。当使用该 InitialContext 进行 JNDI 查找时,JMS 客户端和 JNDI 存储库之间创建了一个 JNDI 连接。

客户端可以从提供 JNDI 存储库的事件代理查找管理对象,也可以从另一个主机上的基于 LDAP 的存储库查找。

有关从 Solace JNDI 存储库和基于 LDAP 的 JNDI 存储库查找 JMS 管理对象的过程示例,请参阅获取连接工厂。

在事件代理上使用 JMS 管理对象

在 LDAP 存储库上配置连接工厂、队列和主题 JNDI 对象的过程取决于所使用的特定 LDAP 提供程序。有关如何在 Open LDAP JNDI 存储库中绑定 JMS 管理对象的示例,请参阅 SolJMSLDAPBind.java 示例。

通过编程方式创建JMS管理对象

客户端应用程序可以使用 SolJMSUtility 类的 SolConnectionFactorySolXAConnectionFactorySolQueueSolTopic 接口,通过编程方式创建 JMS 管理的连接工厂、XA 连接工厂、队列和主题对象,而不是依赖 JNDI 服务来查找它们。SolConnectionFactorySolXAConnectionFactorySolQueueSolTopic 对象是 Solace 对标准 JNDI 连接工厂、XA 连接工厂、队列和主题对象的专有实现。

通过编程方式创建的 JMS 对象可以绑定到基于 LDAP 的 JNDI 存储库,以便 JMS 客户端可以重用它们。在 LDAP 存储库上配置对象的过程取决于所使用的特定 LDAP 提供程序。有关如何在 Open LDAP JNDI 存储库中绑定 JMS 管理对象的示例,请参阅 SolJMSLDAPBind.java 示例。

通过编程方式创建连接工厂和 XA 连接工厂对象

在通过编程方式创建 SolConnectionFactorySolXAConnectionFactory 对象时,除非通过传入的环境或通过设置操作(例如,SolConnectionFactory.setReconnectRetriesSolXAConnectionFactory.setReconnectRetries)明确覆盖,否则使用预定义的默认连接工厂属性。有关可以为 SolConnectionFactorySolXAConnectionFactory 对象执行的获取和设置操作的列表,请参阅 JMS API 参考文档。

必须为 SolConnectionFactorySolXAConnectionFactory 指定主机、用户名、密码和消息 VPN 属性,以便建立与事件代理的 JMS 数据连接。这些属性可以通过多个 JMS 属性源提供(参阅 JMS 属性源),也可以在创建 SolConnectionFactory 时提供。

  • 要通过编程方式创建 SolConnectionFactory,调用以下方法之一:

    • SolJMSUtility.createConnectionFactory() 使用默认连接工厂属性创建连接工厂。

    • SolJMSUtility.createConnectionFactory(java.util.Hashtable<?,?> environment) 使用给定环境创建连接工厂。传入环境中指定的任何连接属性将覆盖默认连接工厂属性。

    • SolJMSUtility.createConnectionFactory(java.lang.String host, java.lang.String username, java.lang.String password, java.lang.String vpn, java.util.Hashtable<?,?> environment)

      使用给定环境创建连接工厂。还传入了建立与事件代理连接所需的主机、用户名、密码和消息 VPN 属性。

  • 要通过编程方式创建 SolXAConnectionFactory,调用以下方法之一:

    • SolJMSUtility.createXAConnectionFactory() 使用默认 XA 连接工厂属性创建 XA 连接工厂。

    • SolJMSUtility.createXAConnectionFactory(java.util.Hashtable<?,?> environment) 使用给定环境创建 XA 连接工厂。传入环境中指定的任何连接属性将覆盖默认 XA 连接工厂属性。

    • SolJMSUtility.createXAConnectionFactory(java.lang.String host, java.lang.String username, java.lang.String password, java.lang.String vpn, java.util.Hashtable<?,?> environment) 使用给定环境创建 XA 连接工厂。还传入了建立与事件代理连接所需的主机、用户名、密码和消息 VPN 属性。

有关通过编程方式创建连接工厂或 XA 连接工厂以建立与事件代理的 JMS 连接的过程概述,请参阅通过编程方式创建连接工厂。

通过编程方式创建队列对象

要通过编程方式创建 SolQueue,调用 SolJMSUtility.createQueue(java.lang.String queueName)

通过编程方式创建主题对象

要通过编程方式创建 SolTopic,调用 SolJMSUtility.createTopic(java.lang.String topicName)