跳到主要内容

替换表达式概述

替换表达式是 Solace 特定的表达式语言,用于将特定的文本属性(请求目标、请求头等)替换为系统生成的输出。

例如,假设您的部署需要使用REST交付点(RDP)将消息发送到存储服务,如Azure Storage、Amazon S3或Google Cloud Storage。这要求将每个消息发送到一个唯一的目标,最好是从消息主题、元数据或当前时间获取该唯一性。为了实现这一点,您可以在请求目标中嵌入一个替换表达式,配置系统根据每个传入消息的数据(主题、当前时间等)修改目标。

替换表达式由字面值或函数调用来组成。函数调用参数可以是任何适当类型的替换表达式。

当嵌入到文本属性中时,替换表达式由${}分隔。只有在字符串文字之外的闭合大括号才能结束替换表达式;在替换表达式内部不需要特别转义大括号。要在文本中包含${,可以使用替换表达式。例如,${可以编码为${"$"}{}。

任何无效的替换表达式都会在配置时导致错误。您可以通过所有可用的监控接口(Broker Manager、CLI、SEMPv1和SEMPv2)查看错误消息的详细信息。

替换表达式函数锚

替换表达式函数返回一个值,并且可能需要参数。以下是当前可用的函数以及它们是否适用于RDP、Kafka发送方或Kafka接收方对象的列表。

函数参数和返回值有指定的类型。字符串可以在任何接受字节的地方传递;没有其他自动转换。可用的类型包括:

  • integer:一个64位整数值(范围:-9223372036854775808到9223372036854775807)。

  • string:一个UTF-8编码的字符串。

  • bytes:一个0个或多个字节的序列。

所有传递给时间函数的时间戳参数(utcYear、utcDate等)必须以毫秒为单位。

函数名称使用参数类型返回类型上下文描述
..................

1—这些值对应于非SMF API中的特定字段。有关这些替换表达式从SMF到非SMF协议的值映射信息,请参阅我们协议元数据和负载编码交互页面上的以下部分:

  • SMF到AMQP转换
  • SMF到MQTT 5.0转换
  • SMF到MQTT 3.1转换
  • SMF到JMS转换
  • SMF到HTTP转换
  • SMF到HTTP请求转换
  • SMF到Kafka转换

替换表达式处理示例

下表列出了几个示例,说明了PubSub+事件代理如何处理替换表达式。示例假设一条消息在2006年1月2日15:04:05.123到达,具有以下数据:

  • 主题 = t/v1/DE/sk/escalator/1,2/sk_1.x/DE12345/raw

  • 发送者时间戳 = 2006年1月2日15:04:04.987

  • "author"用户属性 = Jane "The Bear" Doe

  • 在启用替换表达式的特定上下文中,替换表达式评估后可能会发生进一步处理。例如,替换处理后,请求目标将有空格和非ASCII字符进行百分比编码,以确保目标有效。

  • 下面的示例中的换行符和缩进仅为了可读性。

输入输出
${topic()}t/v1/DE/sk/escalator/1,2/sk_1.x/DE12345/raw
${urlEncode(topic(),<br>"/")}t/v1/DE/sk/escalator/1%2C2/sk_1.x/DE12345/raw
${urlEncode(topic())}t%2Fv1%2FDE%2Fsk%2Fescalator%2F1%2C2%2Fsk_1.x%2FDE12345%2Fraw
global/landing/solace/${topic(5)}/${topic(7)}/${topic(8)}/${ts()}global/landing/solace/escalator/sk_1.x/DE12345/1136189044987
${utcDate()}/${utcTime()}/${base32(randomBytes(15))}2006-01-02/15:04:04/4fdm3hlyafhh77ntxqcwbt7b
${utcDate("/")}/${utcTime("/")}/${BASE32(randomBytes(15))}2006/01/02/15/04/04/4FDM3HLYAFHH77NTXQCWBT7B
${userPropertyAsString("author")}Jane "The Bear" Doe
${"${"}text in the<br>delimiters}${text in the delimiters}
A number: ${5}A number: 5
${"${This is a valid<br>substitution expression.}"}${This is a valid substitution<br>expression.}
${"This is also a valid<br>substitution expression!  :-}"}This is also a valid<br>substitution expression!  :-}
This is a valid attribute value<br>with no substitution expression. :-}This is a valid attribute value<br>with no substitution expression. :-}
${base64("Strings can be<br>used where bytes are specified.")}U3RyaW5ncyBjYW4gYmUgdXNlZCB3aGVyZSBieXRlcyBhcmUgc3BlY2lmaWVkLg==

可以包含替换表达式的文本属性

以下文本属性可以包含替换表达式:

  • 如果配置了替换表达式评估,则RDP POST请求目标。更多信息,请参见管理REST交付点。

  • RDP请求头。更多信息,请参见管理REST交付点。

  • Kafka接收方主题绑定(SMF主题生成)。更多信息,请参见配置SMF主题生成。

  • Kafka接收方主题绑定(分区队列密钥生成)。更多信息,请参见配置分区密钥生成。

  • Kafka发送方队列绑定(Kafka分区密钥生成)。更多信息,请参见配置Kafka分区密钥生成。