跳到主要内容

在PubSub+ JCSMP API中发送直接消息

当发送直接消息时,使用 PubSub+ JCSMP API 的客户端应用程序必须考虑以下因素:

  • 是否希望以流式或非流式模式发送消息。请参阅 PubSub+ JCSMP API 中的流式和非流式发送。
  • 每次发送调用要发布的消息数量。请参阅一次发送一条消息或一次发送多条消息。
  • 是否希望发送需要接收方回复的消息。请参阅在 PubSub+ JCSMP API 中发布请求回复的消息。

有关如何发布和接收直接消息的示例,请参阅 Solace 开发者中心中的 DirectPubSub 示例。

PubSub+ JCSMP API中的流式和非流式发送

PubSub+ JCSMP API 仅支持阻塞式网络 I/O 模型。但是,当发布消息时,JCSMP 可以使用一个发布事件处理器,该处理器以流式或非流式模式运行。发布事件处理器使用的模式是在获取 XMLMessageProducer 时设置的。

要使用 JCSMP 发布消息,客户端必须从 JCSMPSession 获取一个 XMLMessageProducer。获取后,JCSMPSession 将维护与事件代理的连接,应用程序随后可以发送消息。

XMLMessageProducer 也可以通过生产者接口创建会话相关消息,详情请参阅消息所有权。

直到在 XMLMessageProducer 上调用 close() 方法之前,XMLMessageProducer 始终处于“打开”状态。

客户端应该缓存获取的实例,并且仅在不再需要时关闭它。为每条发送的消息获取一个新的 XMLMessageProducer 实例是低效的。

要获取 XMLMessageProducer 实例,请调用 getMessageProducer(JCSMPStreamingPublishEventHandler callback) 并设置回调处理器。当传入的 JCSMPStreamingPublishEventHandler 参数实例非空时,发送操作将使用 JCSMPStreamingPublishEventHandler 通过回调机制异步获取消息投递失败的确认。

一次发送一条消息

要通过 API 调用发布单条消息,请调用 XMLMessageProducer.send(...) 方法:

producer.send(message, JCSMPFactory.onlyInstance().createTopic(topicString));

当使用 JCSMP 并且发送由生产者创建的消息(即会话相关消息)时,请确保应用程序:

  • 不要发送在之前的 JCSMPSession 中创建的或者由另一个 XMLMessageProducer 创建的 Message 实例。尝试这样做会抛出 IllegalArgumentException
  • 不要多次发送相同的消息。尝试这样做会抛出 InvalidOperationException
  • 在完成发布后调用 close() 关闭生产者。任何进一步的访问,例如发送消息,都会引发异常。

一次发送多条消息

可以通过单个 API 调用发送一组直接消息。这允许以批处理或向量的方式发送消息。要发送的消息以数组形式指定;一次调用最多可以发送五十条消息。

当批量发送消息时,应为所有消息设置直接传递模式,详情请参阅传递模式。

当使用 JCSMP 时,必须传入一个 {Message, Destination} 对的数组(每个由 JCSMPSendMultipleEntry 实例表示)。这种配对允许将消息发送到各个目的地。每条消息都必须是应用程序拥有的消息实例(即,通过 JCSMPFactory.createMessage(...) 获取)。

PubSub+ JCSMP API 尝试一次性将所有消息写入网络,并在完成后阻塞。

要发布一组消息,请使用 XMLMessageProducer.sendMultiple(...) 方法。

有关更多信息,请参阅 PubSub+ JCSMP 消息传递 API 参考。