跳到主要内容

在PubSub+ JCSMP API中使用结构化数据

结构化数据类型(SDT)是结构化的、与语言无关的、与架构无关的数据类型。SDT 可以用于消息中,以便在具有不同硬件架构和编程语言的客户端的异构网络中交换二进制数据。

PubSub+ JCSMP API 支持在消息的二进制附件中或作为用户定义的消息头字段携带结构化数据。

所有结构化数据都必须添加到或从复杂的数据结构(映射和流)中读取,这些结构通常被称为容器。容器本身也是结构化数据类型。因此,映射或流可以包含简单的 SDT 类型或其他映射或流。

  • 有关如何在发布和接收消息时使用 SDT 的示例,请参阅 Solace 开发者中心上的请求回复示例(RRDirectRequesterRRDirectReplierRRGuaranteedRequesterRRGuaranteedReplier)。
  • 有关如何向消息添加 SDT 负载的示例,请参阅 Solace 开发者中心上的 SDTPubSubMsgIndepSDTPubSubMsgDep 示例。
    • SDTPubSubMsgIndep 示例中,SDT 容器是使用应用程序内存创建的,这是 PubSub+ JCSMP API 所允许的。
    • 有关使用应用程序内存创建 SDT 容器的更多信息,请参阅在 PubSub+ JCSMP API 中创建结构化数据映射和流。

支持的结构化数据类型

PubSub+ 消息传递 API 支持以下 SDT。

数据类型JCSMPC API.NET APIJavaScript 和 Node.js API
布尔值java.lang.BooleansolClient_bool_tSystem.Booleanboolean
8 位有符号整数java.lang.BytesolClient_int8_tSystem.Int16number
8 位无符号整数不适用solClient_uint8_tSystem.Bytenumber
16 位有符号整数java.lang.ShortsolClient_int16_tSystem.Int16number
16 位无符号整数不适用solClient_uint16_tSystem.Int16number
32 位有符号整数java.lang.IntegersolClient_int32_tSystem.Int32number
32 位无符号整数不适用solClient_uint32_tSystem.Int64number
64 位有符号整数java.lang.LongsolClient_int64_tInt64number 支持 48 位整数(范围:0 到 2^48-1)。在编码时,仅考虑最低 48 位有效。
64 位无符号整数不适用solClient_uint64_tInt64(当没有精度损失时)number 支持 48 位整数(范围:0 到 2^48-1)。在编码时,仅考虑最低 48 位有效。
32 位浮点数floatfloatfloatnumber 单精度浮点数。
64 位浮点数doubledoubledoublenumber 双精度浮点数。
字符(16 位 Unicode)java.lang.CharactersolClient_wchar_tSystem.Charstring 单个字符。
字节数组byte[]solClient_uint8_tbyte[]Int8Array
字符串(UTF-8 编码)java.lang.Stringconst char *System.stringstring
目的地(主题或队列的物理名称)com.solacesystems.
jcsmp.DestinationsolClient_
destination_tIDestinationsolace.Destination
SMF 消息com.solacesystems.
jcsmp.
RawSMFMessagesolclient_uint8_t *IMessagesolace.Message
映射(一系列命名字段的结构化数据容器。每个字段必须是受支持的数据类型之一。)SDTMapsolClient_
opaqueContainer_ptIMapContainersolace.SDTMapContainer
流(一系列未命名字段的结构化数据容器。每个字段必须是受支持的数据类型之一。)SDTStreamsolClient_
opaqueContainer_ptIStreamContainersolace.SDTStreamContainer
未知(格式正确但未识别的数据类型)com.solacesystems.
jcsmp.
SDTUnknownTypesolClient_uint8_tIUnknownSDTField使用 solace.SDTFieldType.UNKNOWN
空值或未指定null支持结构化数据中的 NULL 数据的添加和获取操作。按定义,NULL 没有 ‘C’ 类型或大小。nullnull

支持的结构化数据类型

结构化数据类型转换

下表列出了在接收消息中受支持的 SDT 如何被 JCSMP、JavaScript 和 Node.js API 读取。

读取为
------
写入为Bool
Byte
Byte[]
Char
Dest
Dbl
Float
Int
Long
Map
Msg
Short
Stream
String1
1. 返回一个布尔值,该值由指定的字符串表示。如果字符串参数不为 null,并且忽略大小写等于字符串 “true”,则返回的布尔值表示一个真值。
2. 如果没有精度损失。

JCSMP 中可能的数据类型转换