跳到主要内容

使用目标

目标对象是一个 JMS 管理对象,它为客户端提供了一个可以发布消息和消费消息的目的地。目标可以是临时的(TemporaryTopicTemporaryQueue)或持久的(TopicQueue)。持久目标对象在事件代理上配置,并可以通过 JNDI 查找找到。

JMS API 支持在目标名称中使用通配符。有关使用事件代理时通配符和目标语法支持的详细概述,请参阅主题支持与语法。

执行目标JNDI查找

如果目标对象在事件代理上的 JNDI 存储库中配置,JMS 应用程序可以在获取 InitialContext(如在使用 JNDI 中所述)后,通过执行以下命令执行目标查找:

Destination dest = (Destination)context.lookup(Dest_name)

Dest_name 参数指定目标配置的 JNDI 名称。

如果目标对象在远程主机上的基于 LDAP 的 JNDI 存储库中配置,JMS 应用程序可以在获取 InitialContext 后,通过执行相同的命令来查找配置的 SolConnectionFactorySolTopicSolQueue 对象,如下代码片段所示:

SolTopic topic = (SolTopic)ctx.lookup(ldapDestDN);

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

创建临时目标

客户端可以在 Session 上调用 createTemporaryTopic()createTemporaryQueue() 来创建一个唯一的临时目标(分别是 TemporaryTopicTemporaryQueue),其作用域和生命周期与其连接相同。只有建立临时目标连接的客户端才允许为该临时目标创建 MessageConsumers

临时主题和临时队列是创建在 Session 级别的独特 JMS 主题和队列对象。临时主题也可以在 TopicSession 级别创建,临时队列可以在 QueueSession 级别创建。临时目标的一个用途是作为 JMSReplyTo 目的地。

当客户端断开连接时,临时主题和队列会在事件代理上短暂保留,而不是立即被销毁。这使得临时主题和队列能够在客户端暂时从一个事件代理断开连接,然后连接到其配对代理的活动切换过程中存活下来。当使用保证传输时,客户端重新连接时可以消费在中断期间收到的临时主题和队列的消息。当使用直接传输时,客户端重新连接时无法消费在中断期间收到的临时主题和队列的消息。

  • 要创建临时主题,请从 Session 调用以下方法:
TemporaryTopic = session.createTemporaryTopic()
  • 要创建临时队列,请从 Session 调用以下方法:
TemporaryQueue = session.createTemporaryQueue()

创建主题

您可以从 Session 调用 createTopic(java.lang.String topicName) 方法来创建一个持久主题,作为生产者可以发布消息的目的地。topicName 是目标的物理名称。

要在事件代理上创建持久主题,事件代理必须安装了 ADB,并且启用了保证消息和消息转储。

要消费发布到主题的消息,需要主题订阅者。请参阅创建持久主题订阅者。

创建队列

您可以从 Session 调用 createQueue(java.lang.String queueName) 方法来创建一个队列实例。当使用队列目标时,必须在事件代理上配置具有与队列实例相同名称的持久队列。

要在事件代理上创建持久队列,事件代理必须安装了 ADB,并且启用了保证消息和消息转储。

  • 如果已经在事件代理上配置了物理队列(通过 SolAdmin 或 CLI),当您调用 createQueue(java.lang.String queueName) 方法并传入物理队列的名称时,将创建该队列的一个实例(即,在 API 中该队列的内存表示)。

您可以使用 SolAdmin 或 Solace CLI 配置和在事件代理上配置持久队列。可以根据需要修改默认配置参数。

  • 如果尚未在事件代理上配置物理队列,并且允许创建动态持久端点(参阅动态持久化),您可以调用 createQueue(java.lang.String queueName) 方法并传入队列名称,以在事件代理上动态创建一个持久物理队列。

当动态创建队列时,将使用默认队列配置参数,这将导致一个仅允许队列所有者访问的独占队列。有关所有队列配置参数的信息,请参阅配置队列。

要允许创建动态持久端点,请将 InitialContext 环境属性 SupportedProperty.SOLACE_JMS_DYNAMIC_DURABLES 设置为 true。您也可以使用 SolAdmin 或 Solace CLI 启用等效的 JNDI 连接工厂属性。