跳到主要内容

协议元数据和负载编码交互

SolacePubSub+ 支持多种开放协议,如 AMQP、JMS 和 MQTT。事件代理在接收到消息时,会将协议特定的消息转换为 SMF(Solace 消息格式)消息。当事件代理将消息发送到应用程序时,会将消息从 SMF 转换回协议特定的消息。每种协议在将协议特定信息转换为 SMF 时都有不同的规则,反之亦然。以下部分展示了开放协议与 SMF 之间的互操作性,这些交互被记录为:

  • 负载转换
    • AMQP
    • MQTT
    • JMS
    • HTTP/REST/RDP
    • Kafka
  • 元数据转换
    • AMQP
    • MQTT 5.0
    • MQTT 3.1
    • JMS
    • HTTP/REST 消息传递
    • RDPs
    • Kafka

负载转换

SMF 支持多种负载附件类型,有助于描述消息中存储的数据类型:

Solace 消息类型描述
二进制附件 - 无结构字节无结构字节可用于传输任何类型的数据
二进制附件 - 文本文本是任何类型的可读文本数据
二进制附件 - 流请参阅使用结构化数据以获取更多信息
二进制附件 - 映射请参阅使用结构化数据以获取更多信息
二进制附件 - 对象JMS 支持将对象序列化到消息负载中
XML 附件某些 API 支持访问消息的 “XML” 附件

Solace 消息 API 支持可选的端到端消息负载压缩。消息负载压缩与非 SMF 协议不兼容,例如 AMQP、HTTP、Kafka 和 MQTT。

AMQP

从 AMQP 到 SMF,如果满足以下任一条件,消息可能会被解释为二进制附件 - 文本:

  • 存在类型为字符串或符号的 amqp-value,或者
  • 消息注释 x-opt-jms-msg-type 设置为 5(TextMessage),或者
  • 消息 content-type 设置为以下之一:
    • text/*
    • application/xml
    • application/xml-dtd
    • application/*+xml
    • application/json
    • application/*+json
    • application/javascript
    • application/ecmascript 其中 “*” 是通配符,或者
  • amqp-value 类型为 null,并且上述条件之一表明消息应被视为文本

否则,消息被解释为二进制附件 - 无结构字节。

如果消息注释 x-opt-jms-msg-type 为 1,并且 AMQP 消息体在数据部分,则事件代理会将接收到的 AMQP 消息解释为二进制附件 - 对象。

以下消息类型不受支持,将导致消息被拒绝:

  • 设置了 x-opt-jms-msg-type 的 Message(0)、MapMessage(2)或 StreamMessage(4)
  • 设置了 amqp-sequence
  • 提供了除 stringsymbolnullbinary 之外的 amqp-value

下表显示了从 SMF 到 AMQP 的消息负载转换方式。负载可能位于消息的值组件或数据组件中,位于第一且唯一的部分。如果尚未根据消息类型设置,则可以设置 content-type

Solace 消息类型负载位置消息注释 x-opt-jms-msg-type消息属性 content-type
二进制附件 - 无结构字节data3(BytesMessage)如果尚未设置,则设置为 application/octet-stream
二进制附件 - 文本value(类型为字符串,或者如果为空字符串则为 null)--
二进制附件 - 流不支持--
二进制附件 - 映射不支持--
二进制附件 - 对象data1(ObjectMessage)如果尚未设置,则设置为 application/x-java-serialized-object
XML 附件value(类型为字符串)--

MQTT

从 MQTT 3.1 到 SMF,发布者应用程序将消息负载转换为二进制附件 - 无结构字节。

从 MQTT 5.0 到 SMF,如果满足以下任一条件,则使用二进制附件 - 文本:

  • MQTT 负载格式指示器(MQTT 规范 3.3.2.3.2)设置为 1
  • MQTT 5.0 内容类型为以下之一:
    • text/*
    • application/xml
    • application/xml-dtd
    • application/json
    • application/javascript
    • application/ecmascript
    • application/*+xml
    • application/*+json

否则,使用二进制附件 - 无结构字节。

下表显示了从 SMF 到 MQTT 的消息负载转换方式,适用于 MQTT 3.1 和 MQTT 5.0。如果无法转换负载,事件代理将使用空负载传递消息。

Solace 消息类型负载存在?MQTT 5.0 负载格式指示器
二进制附件 - 无结构字节0
二进制附件 - 文本1
二进制附件 - 流0
二进制附件 - 映射0
二进制附件 - 对象0
XML 附件1

如果同时存在 XML 附件和二进制附件,则事件代理将丢弃两个负载。

JMS

本节概述了将 JMS 消息负载转换为 SMF 的过程。虽然 JMS 不是一种协议,但在 JMS 层中具有独特的映射,需要在转换期间进行处理。有关信息,请参阅使用其他 API 创建与 JMS 兼容的消息。

下表显示了从 JMS 到 SMF 的消息负载转换方式:

JMS 消息类型Solace 消息类型
BytesMessage二进制附件 - 无结构字节
TextMessage根据连接工厂中的 setXml 设置(默认为 true),为 XML 附件或二进制附件 - 文本。
SolConnectionFactory(Solace JMS API v10.23.0)
StreamMessage二进制附件 - 流
MapMessage二进制附件 - 映射
ObjectMessage二进制附件 - 对象

下表显示了从 SMF 到 JMS 的转换方式:

Solace 消息类型JMS 消息类型
二进制附件 - 无结构字节BytesMessage
二进制附件 - 文本TextMessage
二进制附件 - 流StreamMessage
二进制附件 - 映射MapMessage
二进制附件 - 对象ObjectMessage
XML 附件TextMessage

如果同时存在 XML 附件和二进制附件,则将 XML 负载解释为 TextMessage。

HTTP/REST/RDP

使用 REST 消息传递时,Content-Type 头决定了事件代理是将消息解释为二进制附件 - 文本还是二进制附件 - 无结构字节。如果设置为以下之一:

  • text/*
  • application/xml
  • application/xml-dtd
  • application/*+xml
  • application/json
  • application/*+json
  • application/javascript
  • application/ecmascript

其中 “*” 是通配符,则事件代理将消息解释为文本。如果未指定 Content-TypeContent-Type 设置为未知值,或者存在 Content-Encoding 且未设置为 identity,则事件代理将消息解释为二进制附件 - 无结构字节。

有关更多信息,请参阅消息编码注意事项。

下表显示了从 SMF 到 REST(REST 响应或 RDP 消息)的消息负载转换方式。如果设置了事件的 “HTTP 内容类型” 元数据字段,则 HTTP 响应的 Content-Type 头将设置为该字段的值。否则,可能会使用默认值。如果无法转换负载,事件代理将使用空正文传递消息。

Solace 消息类型负载存在?默认 Content-Type
二进制附件 - 无结构字节application/octet-stream
二进制附件 - 文本text/plain
二进制附件 - 流-
二进制附件 - 映射-
二进制附件 - 对象-
XML 附件text/xml

Kafka

Solace 的集成 Kafka 桥接允许 PubSub+ 事件代理从 Kafka 集群发送和接收数据。

将 Kafka 消息负载转换为 SMF 时,代理将 Kafka 消息转换为带有二进制附件 - 无结构字节负载的 SMF 消息。

将 SMF 消息负载转换为 Kafka 时,事件代理仅在消息具有支持的负载时才传递消息,如下表所示。所有消息负载都将转换为 Kafka 字节。

Solace 消息类型消息传递
二进制附件 - 无结构字节
二进制附件 - 文本
二进制附件 - 流
二进制附件 - 映射
二进制附件 - 对象
XML 附件

元数据转换

SMF 消息可以设置多个元数据字段。每种协议都支持不同的参数集。事件代理在接收到消息时,会将协议特定的消息转换为 SMF 消息。然后在将消息发送到应用程序时,将消息从 SMF 转换回协议特定的消息。

AMQP

本节包含以下信息:

  • AMQP 到 SMF 转换
  • AMQP 消息的不可配置字段
  • SMF 到 AMQP 转换
  • AMQP 消息的不可检索字段

AMQP到SMF转换

下表显示了如何将 AMQP 元数据转换为 SMF:

AMQP 字段SMF 字段默认值说明
消息属性字段 message-id应用程序消息 ID-AMQP 规范 3.2.4 属性
可以是长整型、UUID、字符串、二进制,转换为字符串时可在协议间转换。
消息属性字段 subject应用程序消息类型-AMQP 规范 3.2.4 属性
消息属性字段 application-properties用户属性-AMQP 规范 3.2.5 属性
支持所有简单类型并按需转换。
执行传输字段 batchable立即确认FalseAMQP 规范 2.7.5 传输
消息属性字段 correlation-id相关 ID-AMQP 规范 3.2.4 属性
可以是长整型、UUID、字符串、二进制,转换为字符串时可在协议间转换。
消息头字段 durable交付模式非持久AMQP 规范 3.2.1 头
False = 非持久,True = 持久
执行绑定 target
或者如果没有设置:
消息属性字段 to目的地未设置,必需AMQP 规范 2.7.4 绑定
AMQP 规范 3.2.4 属性
如果按消息设置主题,则称为 “匿名中继”
执行绑定 target capability
或者在匿名中继中
消息注释 message-annotation x-opt-jms-dest
或者从消息属性字段 to 的前缀 queue://topic://目的地类型默认为队列AMQP 规范 2.7.4 绑定
AMQP 规范 3.2.3 消息注释
AMQP 规范 3.2.4 属性
消息属性字段 absolute-expiry-time过期时间0AMQP 规范 3.2.4 属性
消息属性字段 content-typeHTTP 内容类型-AMQP 规范 3.2.4 属性
消息属性字段 content-encodingHTTP 内容编码-AMQP 规范 3.2.4 属性
消息属性字段 group-id分区键-AMQP 规范 3.2.4 属性
消息头字段 priority优先级4AMQP 规范 3.2.1 头
消息属性字段 reply-to回复到主题-AMQP 规范 3.2.4 属性
消息属性字段 creation-time发送者时间戳-AMQP 规范 3.2.4 属性
消息头字段 ttl生存时间0(无限制)AMQP 规范 3.2.1 头

AMQP消息的不可配置字段

发布应用程序不能在 AMQP 消息上设置以下字段:

SMF 字段默认值
仅传递给一个False
DMQ 合格True
可省略False
响应消息-
发送者 ID-
序列号-

SMF到AMQP转换

下表显示了如何将元数据从 SMF 转换为 AMQP:

SMF 字段AMQP 字段说明
应用程序消息 ID消息属性字段 message-idAMQP 规范 3.2.4 属性
可以是长整型、UUID、字符串、二进制。
应用程序消息类型消息属性字段 subjectAMQP 规范 3.2.4 属性
用户属性消息属性字段 application-propertiesAMQP 规范 3.2.5 属性
支持所有简单类型并按需转换。
SMFMessage、Map、Stream 和 Destination 类型不支持
相关 ID消息属性字段 correlation-idAMQP 规范 3.2.4 属性
交付计数消息头字段 delivery-countAMQP 规范 3.2.1 头
交付模式消息头字段 durableAMQP 规范 3.2.1 头
False = 非持久,True = 持久
目的地消息属性字段 toAMQP 规范 3.2.4 属性
HTTP 内容类型消息属性字段 content-typeAMQP 规范 3.2.4 属性
HTTP 内容编码消息属性字段 content-encodingAMQP 规范 3.2.4 属性
分区键消息属性字段 group-idAMQP 规范 3.2.4 属性
优先级消息头字段 priorityAMQP 规范 3.2.1 头
回复到主题消息属性字段 reply-toAMQP 规范 3.2.4 属性
重复传递消息头字段 delivery-countAMQP 规范 3.2.1 头
非零值表示这可能是重复的传递。
发送者时间戳消息属性字段 creation-timeAMQP 规范 3.2.4 属性
生存时间消息头字段 ttlAMQP 规范 3.2.1 头

AMQP消息的不可检索字段

以下 SMF 字段对 AMQP 客户端不可用:

  • 丢弃指示
  • 复制组消息 ID
  • 响应消息
  • 发送者 ID
  • 序列号

first-acquirer 未实现,始终为 false。

MQTT 5.0

本节包含以下信息:

  • MQTT 5.0 到 SMF 转换
  • MQTT 5.0 消息的不可配置字段
  • SMF 到 MQTT 5.0 转换
  • MQTT 5.0 消息的不可检索字段

MQTT 5.0到SMF转换

下表显示了如何将元数据从 MQTT 5.0 转换为 SMF:

MQTT 字段SMF 字段默认值说明
内容类型应用程序消息类型-MQTT 5.0 规范 3.3.2.3.9 内容类型
用户属性用户属性-MQTT 5.0 规范 3.3.2.3.7 用户属性 MQTT 5.0 仅支持字符串值
相关数据相关 ID-MQTT 5.0 规范 3.3.2.3.6 相关数据
QoS交付模式未设置,必需MQTT 5.0 规范 3.3.1.2 QoS QoS 0 = 直接 QoS 1 = 持久 QoS 2 = 持久
主题头目的地未设置,必需MQTT 5.0 规范 3.3.2.1 主题名称 与 SMF 一样,主题可以使用 _P2P/QUE/<queue> 前缀发布到队列。
内容类型HTTP 内容类型-MQTT 5.0 规范 3.3.2.3.9 内容类型
用户属性 JMSXGroupID分区键-MQTT 5.0 规范 3.3.2.3.7 用户属性
PUBLISH 响应响应消息-MQTT 5.0 规范 3.3.4 响应
消息过期时间间隔生存时间0(无限制)MQTT 5.0 规范 3.3.2.3.3 消息过期时间间隔

MQTT 5.0消息的不可配置字段

发布应用程序不能在 MQTT 5.0 消息上设置以下字段:

SMF 字段默认值
应用程序消息 ID-
立即确认False
仅传递给一个False - 可以使用共享订阅实现仅传递给一个的功能
DMQ 合格True
可省略False
过期时间-
HTTP 内容编码-
优先级4
回复到主题-
发送者 ID-
发送者时间戳-
序列号-

SMF到MQTT 5.0转换

下表显示了如何将元数据从 SMF 转换为 MQTT:

SMF 字段MQTT 字段说明
应用程序消息类型内容类型MQTT 5.0 规范 3.3.2.3.9 内容类型
用户属性用户属性MQTT 5.0 规范 3.3.2.3.7 用户属性
所有简单类型在出站时转换为字符串。
SMFMessage、Map、Stream、Destination 和字节数组类型不支持
相关 ID相关数据MQTT 5.0 规范 3.3.2.3.6 相关数据
交付模式QoSMQTT 5.0 规范 3.3.1.2 QoS
QoS 0 = 直接
QoS 1 = 持久
QoS 2 = 持久
目的地主题头MQTT 5.0 规范 3.3.2.1 主题名称
分区键用户属性 JMSXGroupIDMQTT 5.0 规范 3.3.2.3.7 用户属性
回复到主题响应MQTT 5.0 规范 3.3.4 响应
重复传递DUPMQTT 5.0 规范 3.3.1.1 DUP
生存时间消息过期时间间隔MQTT 5.0 规范 3.3.2.3.3 消息过期时间间隔

MQTT 5.0消息的不可检索字段

以下 SMF 字段对 MQTT 5.0 客户端不可用:

  • 应用程序消息 ID
  • 交付计数
  • 丢弃指示
  • HTTP 内容类型
  • HTTP 内容编码
  • 优先级
  • 响应消息
  • 复制组消息 ID
  • 发送者 ID
  • 发送者时间戳
  • 序列号

MQTT 3.1

本节包含以下信息:

  • MQTT 3.1 到 SMF 转换
  • MQTT 3.1 消息的不可配置字段
  • SMF 到 MQTT 3.1 转换
  • MQTT 3.1 消息的不可检索字段

MQTT 3.1到SMF转换

下表显示了如何将元数据从 MQTT 3.1 转换为 SMF:

MQTT 字段SMF 字段默认值说明
QoS交付模式未设置,必需MQTT 3.1.1 规范 3.3.1.2 QoS
QoS 0 = 直接
QoS 1 = 持久
QoS 2 = 持久
主题头目的地未设置,必需MQTT 3.1.1 规范 3.3.2.1 主题名称
与 SMF 一样,主题可以使用 _P2P/QUE/<queue> 前缀发布到队列。

MQTT 3.1消息的不可配置字段

发布应用程序不能在 MQTT 3.1 消息上设置以下字段:

SMF 字段默认值
应用程序消息 ID-
应用程序消息类型-
用户属性-
立即确认False
相关 ID-
仅传递给一个False - 可以使用共享订阅实现仅传递给一个的功能
DMQ 合格True
可省略False
过期时间-
HTTP 内容类型-
HTTP 内容编码-
分区键-
优先级4
响应消息-
回复到主题-
发送者 ID-
发送者时间戳-
序列号-
生存时间0(无限制)

SMF到MQTT 3.1转换

下表显示了如何将元数据从 SMF 转换为 MQTT 3.1:

SMF 字段MQTT 字段说明
交付模式PUBLISH QoSMQTT 3.1.1 规范 3.3.1.2 QoS
QoS 0 = 直接
QoS 1 = 持久或非持久
目的地主题头MQTT 3.1.1 规范 3.3.2.1 主题名称
重复传递PUBLISH DUPMQTT 3.1.1 规范 3.3.1.1 DUP

MQTT 3.1 消息的不可检索字段

以下 SMF 字段对 MQTT 3.1 客户端不可用:

  • 应用程序消息 ID
  • 应用程序消息类型
  • 用户属性
  • 相关 ID
  • 交付计数
  • 丢弃指示
  • HTTP 内容类型
  • HTTP 内容编码
  • 分区键
  • 优先级
  • 响应消息
  • 回复到主题
  • 复制组消息 ID
  • 发送者 ID
  • 发送者时间戳
  • 序列号
  • 生存时间

JMS

本节包含以下信息:

  • JMS 到 SMF 转换
  • JMS 消息的不可 配置字段
  • SMF 到 JMS 转换
  • JMS 消息的不可检索字段

JMS到SMF转换

下表显示了如何将元数据从 JMS 转换为 SMF:

JMS 字段SMF 字段默认值说明
JMSMessageID应用程序消息 ID-JMS 1.1 3.4.3 JMSMessageID
必须以 “ID:” 为前缀
JMSType应用程序消息类型-JMS 1.1 3.4.8 JMSType
JMS 属性用户属性-JMS 1.1 3.5 消息属性
任何不以 JMS 开头的属性,包括 JMSXJMS_
JMSCorrelationID相关 ID-JMS 1.1 3.4.5 JMSCorrelationID
消息传递模式交付模式直接JMS 1.1 4.7 消息传递模式
消息属性 JMS_Solace_DeliverToOne仅传递给一个FalseJMS 1.1 3.5 消息属性
目的地目的地未设置,必需JMS 1.1 4.2.1 目的地
使用目的地
消息属性 JMS_Solace_DeadMsgQueueEligibleDMQ 合格TrueJMS 1.1 3.5 消息属性
消息属性 JMS_Solace_ElidingEligible可省略FalseJMS 1.1 3.5 消息属性
JMSExpiration过期时间未设置或如果指定了 TTL,则为当前时间 + 生存时间JMS 1.1 3.4.9 JMSExpiration
如果设置了生存时间,则自动设置为当前时间 + 生存时间
消息属性 JMS_Solace_HTTPContentTypeHTTP 内容类型-JMS 1.1 3.5 消息属性
消息属性 JMS_Solace_HTTPContentEncodingHTTP 内容编码-JMS 1.1 3.5 消息属性
JMS 属性 JMSXGroupID分区键-JMS 1.1 3.5.9 JMS 定义的属性
JMSPriority优先级4JMS 1.1 3.4.10 JMSPriority
消息属性 Solace_JMS_Prop_IS_Reply_Message响应消息-JMS 1.1 3.5 消息属性
JMSReplyTo回复到主题-JMS 1.1 3.4.6 JMSReplyTo
消息属性 JMS_Solace_SenderId发送者 ID-JMS 1.1 3.5 消息属性
JMSTimestamp发送者时间戳-JMS 1.1 3.4.4 JMSTimestamp
消息属性 JMS_Solace_TopicSequenceNumber序列号-JMS 1.1 3.5 消息属性
消息生存时间生存时间0(无限制)JMS 1.1 4.8 消息生存时间

JMS消息的不可配置字段

发布应用程序不能在 JMS 消息上设置以下字段:

SMF 字段默认值
立即确认False

SMF到JMS转换

下表显示了如何将元数据从 SMF 转换为 JMS:

SMF 字段JMS 字段说明
应用程序消息 IDJMSMessageIDJMS 1.1 3.4.3 JMSMessageID
应用程序消息类型JMSTypeJMS 1.1 3.4.8 JMSType
用户属性JMS 属性JMS 1.1 3.5 消息属性
任何不以 JMS 开头的属性,包括 JMSXJMS_
相关 IDJMSCorrelationIDJMS 1.1 3.4.5 JMSCorrelationID
交付计数JMS 属性 JMSXDeliveryCountJMS 1.1 3.5.9 JMS 定义的属性
交付模式JMSDeliveryModeJMS 1.1 3.4.2 JMSDeliveryMode
目的地目的地JMS 1.1 4.2.1 目的地
丢弃指示消息属性 JMS_Solace_MsgDiscardIndicationJMS 1.1 3.5 消息属性
HTTP 内容类型消息属性 JMS_Solace_HTTPContentTypeJMS 1.1 3.5 消息属性
HTTP 内容编码消息属性 JMS_Solace_HTTPContentEncodingJMS 1.1 3.5 消息属性
分区键JMS 属性 JMSXGroupIDJMS 1.1 3.5.9 JMS 定义的属性
优先级JMSPriorityJMS 1.1 3.4.10 JMSPriority
响应消息消息属性 Solace_JMS_Prop_IS_Reply_MessageJMS 1.1 3.5 消息属性
回复到主题JMSReplyToJMS 1.1 3.4.6 JMSReplyTo
重复传递JMSRedeliveredJMS 1.1 3.4.7 JMSRedelivered
发送者 ID消息属性 JMS_Solace_SenderIdJMS 1.1 3.5 消息属性
发送者时间戳JMSTimestampJMS 1.1 3.4.4 JMSTimestamp
序列号消息属性 JMS_Solace_TopicSequenceNumberJMS 1.1 3.5 消息属性
生存时间消息生存时间JMS 1.1 4.8 消息生存时间

JMS消息的不可检索字段

以下 SMF 字段对 JMS 客户端不可用:

  • 复制组消息 ID

HTTP/REST消息传递

本节包含以下信息:

  • HTTP 到 SMF 转换
  • HTTP 消息的不可配置字段
  • SMF 到 HTTP 转换
  • HTTP 消息的不可检索字段

有关如何使用 Solace REST 消息传递的更多信息,请参阅开放 API 和协议 - REST。

HTTP 到 SMF 转换

使用 HTTP 消息传递发送消息时,请使用以下转换表:

HTTP 字段SMF 字段默认值说明
HTTP 头 Solace-Message-ID应用程序消息 ID如果使用请求 - 响应消息传递或微网关模式,则默认值为以 ID:Solace- 开头的唯一值。否则,默认值未设置。Solace REST HTTP 头的使用
任何未使用的头都会透明地传递,或者在被非 HTTP 客户端消费时转换为 JMS_Solace_HTTP_field_<fieldName>用户属性(微网关模式)-仅支持字符串值类型
形式为 Solace-User-Property-{name}: {value};type={type} 的 HTTP 头将转换为名为 {name} 的属性。如果没有类型信息,则使用字符串值类型用户属性(微网关或消息传递模式)-Solace 消息自定义属性
HTTP 头 Solace-Correlation-ID相关 ID如果使用请求 - 响应消息传递或微网关模式,则默认值为以 ID:Solace- 开头的唯一值。否则,默认值未设置。Solace REST HTTP 头的
使用
HTTP 头 Solace-Delivery-Mode交付模式(微网关模式)直接以下之一 [直接 | 非持久 | 持久]
HTTP 头 Solace-Delivery-Mode交付模式(消息传递模式)持久以下之一 [直接 | 非持久 | 持久]
目的地编码到 REST 请求路径中,如 HTTP 请求目标所示目的地未设置,必需HTTP 请求目标
如果使用微网关模式,则仅允许发布到主题。在消息传递模式中,目的地可以在请求目标中使用 /TOPIC 或 /QUEUE 前缀。
HTTP 头 Solace-DMQ-EligibleDMQ 合格False[true|false]
HTTP 头 Content-TypeHTTP 内容类型-Solace REST HTTP 头的使用
HTTP 头 Content-EncodingHTTP 内容编码-Solace REST HTTP 头的使用
HTTP 头 Solace-User-Property-JMSXGroupID分区键-Solace REST HTTP 头的使用
如果在消息传递模式中,可以使用 HTTP 头 Solace-Reply-To-Destination 设置消息的回复到主题。此外,可以使用 Solace-Reply-Wait-Time-In-ms 将消息设置为请求 - 响应消息,并自动生成指向此 HTTP 客户端的回复到主题。
在微网关模式中,所有消息都是隐式的请求 - 响应消息,默认超时时间为 30 秒。可以使用 Solace-Reply-Wait-Time-In-ms 更改默认值。回复到主题-值:/[QUEUE/TOPIC]/<destination string>
HTTP 头 Solace-Timestamp发送者时间戳-Solace REST HTTP 头的使用
HTTP 头 Solace-Time-To-Live-In-ms生存时间0(无限制)Solace REST HTTP 头的使用

HTTP 消息的不可配置字段

发布应用程序不能在 HTTP 消息上设置以下字段:

SMF 字段默认值
立即确认-
应用程序消息类型-
仅传递给一个False
可省略False
过期时间-
优先级4
响应消息-
发送者 ID-
序列号-

SMF 到 HTTP 转换

如果您的应用程序期望响应,例如在微网关模式中或使用请求 - 响应(通过 Solace-Reply-Wait-Time-In-ms 设置),下表显示了如何将响应转换为 HTTP 响应:

SMF 字段RDP 字段说明
应用程序消息 IDHTTP 头 Solace-Message-IDSolace REST HTTP 头的使用
用户属性(微网关模式)任何形式为 JMS_Solace_HTTP_field_<fieldName> 的属性都设置为名为 <fieldName> 的 HTTP 头。任何其他用户属性都发送为 Solace-User-Property-{name}所有值类型都转换为字符串。SMFMessage、Map、Stream、Destination 和字节数组类型不支持
用户属性(消息传递模式)形式为 Solace-User-Property-{name}: {value};type={type} 的 HTTP 头Solace 消息自定义属性。SMFMessage、Map、Stream、Destination 和字节数组类型不支持
相关 IDHTTP 头 Solace-Correlation-IDSolace REST HTTP 头的使用
交付模式HTTP 头 Solace-Delivery-ModeSolace REST HTTP 头的使用
HTTP 内容类型HTTP 头 Content-TypeSolace REST HTTP 头的使用
HTTP 内容编码HTTP 头 Content-EncodingSolace REST HTTP 头的使用
分区键HTTP 头 Solace-User-Property-JMSXGroupIDSolace REST HTTP 头的使用
发送者时间戳HTTP 头 Solace-TimestampSolace REST HTTP 头的使用
生存时间HTTP 头 Solace-Time-To-Live-In-msSolace REST HTTP 头的使用

HTTP 消息的不可检索字段

以下 SMF 字段对 HTTP 客户端不可用:

  • 应用程序消息类型
  • 交付计数
  • 目的地
  • 丢弃指示
  • 优先级
  • 响应消息
  • 回复到主题
  • 重复传递
  • 复制组消息 ID
  • 发送者 ID
  • 序列号

RDPs

本节包含以下信息:

  • SMF 到 HTTP 请求转换
  • RDP 消息的不可检索字段
  • HTTP 响应到 SMF 转换
  • RDP 消息的不可配置字段

SMF 到 HTTP 请求转换

将消息从 SMF 传递到 REST 交付点时,下表显示了如何将 SMF 消息转换为 HTTP 请求消息。某些字段也可以通过替换表达式访问,这些表达式可用于确定 RDP 请求目标或请求头。

SMF 字段RDP 字段替换表达式说明
应用程序消息 IDHTTP 头 Solace-Message-IDmsgIdSolace REST HTTP 头的使用
应用程序消息类型-msgType-
用户属性(微网关模式)任何形式为 JMS_Solace_HTTP_field_<fieldName> 的属性都设置为名为 <fieldName> 的 HTTP 头。任何其他用户属性都发送为 Solace-User-Property-{name}-所有值类型都转换为字符串
SMFMessage、Map、Stream、Destination 和字节数组类型不支持
用户属性(消息传递模式)形式为 Solace-User-Property-{name}: {value};type={type} 的 HTTP 头-Solace 消息自定义属性
SMFMessage、Map、Stream、Destination 和字节数组类型不支持
相关 IDHTTP 头 Solace-Correlation-IDcorrelationIdSolace REST HTTP 头的使用
交付模式HTTP 头 Solace-Delivery-Mode-Solace REST HTTP 头的使用
目的地-topic-
HTTP 内容类型HTTP 头 Content-Type-Solace REST HTTP 头的使用
HTTP 内容编码HTTP 头 Content-Encoding-Solace REST HTTP 头的使用
分区键HTTP 头 Solace-User-Property-JMSXGroupIDpartitionKeySolace REST HTTP 头的使用
发送者 ID-senderId-
发送者时间戳HTTP 头 Solace-Timestamp-Solace REST HTTP 头的使用
序列号-sequenceNumber-
生存时间HTTP 头 Solace-Time-To-Live-In-ms-Solace REST HTTP 头的使用

RDP 消息的不可检索字段

以下 SMF 字段对 RDP 客户端不可用:

  • 交付计数
  • 丢弃指示
  • 优先级
  • 响应消息
  • 回复到主题
  • 重复传递
  • 复制组消息 ID

HTTP 响应到 SMF 转换

RDP 消息可以响应,并自动转发到回复到主题。事件代理始终将 RDP 响应消息视为直接消息。

下表显示了如何将 HTTP 响应转换为 SMF 消息:

REST 字段SMF 字段默认值说明
HTTP 头 Solace-Message-ID应用程序消息 ID-Solace REST HTTP 头的使用
形式为 Solace-User-Property-{name}: {value};type={type} 的 HTTP 头用户属性-Solace 消息自定义属性
SMFMessage、Map、Stream、Destination 和字节数组类型不支持
HTTP 头 `Sol
ace-Correlation-ID`相关 ID-Solace REST HTTP 头的使用
HTTP 头 Content-TypeHTTP 内容类型-Solace REST HTTP 头的使用
HTTP 头 Content-EncodingHTTP 内容编码-Solace REST HTTP 头的使用
HTTP 头 Solace-User-Property-JMSXGroupID分区键-Solace REST HTTP 头的使用
HTTP 头 Solace-Timestamp发送者时间戳-Solace REST HTTP 头的使用
HTTP 头 Solace-Time-To-Live-In-ms生存时间0(无限制)Solace REST HTTP 头的使用

RDP 消息的不可配置字段

发布应用程序不能在 RDP 响应消息上设置以下字段:

SMF 字段默认值
立即确认N/A,所有响应都是直接消息
应用程序消息类型-
交付模式直接
仅传递给一个False
目的地自动设置为回复到目的地
目的地类型-
DMQ 合格N/A,所有响应都是直接消息
可省略False
过期时间-
优先级4
响应消息True
回复到主题-
发送者 ID-
序列号-

Kafka

本节包含以下信息:

  • Kafka 到 SMF 转换
  • Kafka 接收器的不可配置字段
  • SMF 到 Kafka 转换
  • Kafka 发送器的不可检索字段

Kafka 到 SMF 转换

下表显示了如何通过 Kafka 接收器将元数据从 Kafka 转换为 SMF。有关更多信息,请参阅在 Kafka 接收器中配置 SMF 主题生成。

Kafka 字段SMF 字段默认值说明
Kafka 头用户属性-所有 Kafka 头都是二进制块,并转换为字节数组
主题通过 Kafka 接收器的主题绑定本地主题配置目的地未设置,必需可以使用前缀发布到队列
分区键分区键--
时间戳发送者时间戳--

Kafka 接收器的不可配置字段

以下字段不能通过 Kafka 接收器设置:

SMF 字段默认值
应用程序消息 ID-
应用程序消息类型-
立即确认False
相关 ID-
交付模式持久
仅传递给一个False
DMQ 合格True
可省略False
过期时间-
HTTP 内容类型-
HTTP 内容编码-
优先级4
响应消息-
回复到主题-
发送者 ID-
序列号-
生存时间0(无限制)

SMF 到 Kafka 转换

下表显示了如何通过 Kafka 发送器将元数据从 SMF 转换为 Kafka:

SMF 字段Kafka 字段说明
用户属性Kafka 头所有简单类型都转换为二进制块,并作为 Kafka 消息上的 Kafka 头附加。
注意:无法自定义 Kafka 头。
发送者时间戳时间戳-

有关如何通过替换表达式访问 SMF 字段的信息,请参阅替换表达式概述。

Kafka 发送器的不可检索字段

Kafka 发送器无法使用以下字段:

以下字段可以通过替换表达式检索,用于 Kafka 分区键。有关更多信息,请参阅替换表达式概述。

  • 应用程序消息 ID
  • 应用程序消息类型
  • 相关 ID
  • 交付计数
  • 交付模式
  • 目的地
  • 丢弃指示
  • HTTP 内容编码
  • HTTP 内容类型
  • 分区键
  • 优先级
  • 重复传递
  • 回复到主题
  • 复制组消息 ID
  • 响应消息
  • 发送者 ID
  • 序列号
  • 生存时间

在 Kafka 中,消息始终设置为 “至少一次” 的传递保证。