跳到主要内容

在PubSub+ JCSMP API中创建消息

当发布消息时,客户端应用程序会显式创建消息,而在匹配消息传递时,PubSub+ JCSMP API 会隐式创建消息。PubSub+ JCSMP API 创建一个指定类的对象来封装消息。

在创建消息时,应考虑以下因素:

  • 消息所有权
  • 消息类型
  • 重置消息

消息所有权

当为发布创建消息时,存在两种消息所有权模型:

  • 会话无关

在会话无关的消息所有权模型中,客户端应用程序可以在发送操作之间重复使用消息。消息按需分配,并且当客户端应用程序完成消息处理后,会显式地释放这些消息。

  • 会话相关

JCSMP 还支持会话相关消息所有权模型。在此模型中,消息实例预先分配到生产者消息池中;客户端应用程序可以从消息池中“获取”一个消息实例,填充它,并发送它。当发送操作返回时,API 会自动重置消息实例,并将其“放回”消息池。这是通过会话上的 Producer 接口完成的。会话相关消息不能用于批量发送。

会话相关消息所有权模型主要用于与使用 JCSMP 的现有应用程序保持向后兼容。建议新的 Java 应用程序使用会话无关消息。如果消息被预先分配并尽可能重复使用,使用会话无关消息所有权模型不会带来性能损失。

要创建会话无关消息,请使用 JCSMPFactory.createMessage(...)。此方法创建一个指定类的对象(请参阅 JCSMP 消息类)来封装消息。

有关如何创建会话无关消息的示例,请参阅 Solace 开发者中心中的 ADPubAck 示例。

要创建会话相关消息,请使用以下方法:

  • producer.createBytesXMLMessage()
  • producer.createBytesMessage()
  • producer.createMapMessage()
  • producer.createStreamMessage()
  • producer.createTextMessage()
  • producer.createXMLContentMessage()

消息类型

PubSub+ 消息传递 API 支持由消息负载定义的不同消息类型。为了方便程序员,PubSub+ JCSMP API 提供了以下类型安全的消息类型/类。

消息类描述
BytesXMLMessage一个非结构化类,可用于发送包含 XML 数据负载的消息。
BytesMessage一个结构化类,可用于发送包含二进制附件中的未解释字节流的消息。
MapMessage一个结构化类,可用于发送包含结构化数据类型(SDT)映射的消息。请参阅在 PubSub+ JCSMP API 中使用结构化数据。
StreamMessage一个结构化类,可用于发送包含 SDT 流的消息。请参阅在 PubSub+ JCSMP API 中使用结构化数据。
TextMessage一个结构化类,可用于发送包含文本的消息。
XMLContentMessage一个结构化类,可用于发送包含 XML 数据的消息。

JCSMP 消息类

重置消息

在会话无关消息所有权模型中重复使用消息时,您可以释放与消息缓冲区相关的所有内存,以便将消息缓冲区重置为其原始状态(即,就像它刚刚被分配一样)。所有字段都被重置为其默认值。

要重置消息,请使用 XMLMessage.reset()