跳到主要内容

创建消息

在发布时,客户端应用程序会显式创建消息,而在匹配的消息投递过程中,消息 API 会隐式创建消息。

Java RTO API

在本地库中创建一个对象,并为应用程序提供一个句柄。

C API

从堆存储中分配一个内存缓冲区,用于存储和发送/接收消息。

.NET API

创建一个 IMessage 对象以封装消息。

JavaScript 和 Node.js API

创建一个 solace.Message 对象以封装消息。

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

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

消息所有权

在创建用于发布的消息时,有两种消息所有权模型:

会话无关(Session-independent)

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

会话相关(Session-dependent)

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

会话相关消息不能用于批量发送(参见发送直接消息)。

PubSub+ 消息 API调用方法
Java RTOSolclient.createMessageForHandle(...)
为给定的未绑定 MessageHandle 分配一个新消息。
CsolClient_msg_alloc(...)
从堆存储中分配一个内存缓冲区,用于存储和发送/接收消息。
.NET- ContextFactory.CreateMessage()
  • ISession.CreateMessage()
    创建一个 IMessage 对象以封装消息。 | | JavaScript 和 Node.js | solace.SolclientFactory.createMessage()
    创建一个 solace.Message 对象以封装消息。 |

如何创建会话无关消息

相关示例

有关如何创建会话无关消息的示例,请参考 Java RTO、C 和 .NET API 的 DirectPubSub 示例,以及 JavaScript 和 Node.js API 的 TopicPublisher 示例。

PubSub+ 消息 API调用方法
Java RTO不适用
C不适用
.NET不适用
JavaScript 和 Node.js不适用

如何创建会话相关消息

消息类型

消息 API 支持由消息负载定义的不同消息类型。

Java RTO API

Java RTO 提供了以下消息类型:

Java RTO 消息类

消息类描述
BytesMessage一个结构化的类,可用于发送包含二进制附件中未解释字节流的消息。

C、JavaScript、Node.js 和 .NET API

这些 API 定义了单一消息类型。在这些 API 中,消息负载可以通过消息辅助函数包含上述消息类型和类的任何组合。

重置消息

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

Java RTO API 没有提供重置方法。如果使用 MessageHandle.destroy() 销毁消息,则必须再次调用 createMessageForHandle 为现在未绑定的句柄分配一个新消息。

PubSub+ 消息 API调用方法
Java RTO不适用
CsolClient_msg_reset(...)
.NETIMessage.reset()
JavaScript 和 Node.jssolace.Message.reset()

如何重置消息