ESQL 变量是用于帮助处理消息的数据字段。
您必须先声明变量及其类型,然后才能使用它。变量的数据类型是固定的;如果您编写的 ESQL 指定了不同类型的值,要么进行隐式强制类型转换,将其转换为目标数据类型,要么发生异常(如果不支持隐式强制类型转换)。
要定义变量并为其指定名称,请使用 DECLARE 语句。
注: ESQL 变量的名称区分大小写,因此确保在所有位置都使用正确的大小写很重要。做到这一点的最简单方法是始终使用大写名称定义变量。
带有“变量尚未定义”警告标记的 Message Broker Toolkit 标志。在部署消息流之前,最好除去所有这些警告。
您可以在 DECLARE 语句中为变量赋初始值。如果不指定初始值,则使用特殊值 NULL 初始化标量变量,同时将 ROW 变量初始化为空状态。随后,您可以使用 SET 语句更改变量的值。
有三种内置节点可以包含 ESQL 代码,因此支持使用 ESQL 变量:
变量作用域、生存期和共享
特定 ESQL 变量的具体作用范围和作用时间通过变量的作用域、生存期和共享进行描述:
变量的作用域可测量其可视范围。在代理环境中,变量的作用域通常局限在单独的节点中。
变量的生存期可测量它保持值的时间。在代理环境中,变量的生存期会改变,但通常不超过节点中线程的生存期。
变量的共享特征指出每个线程是否有它自己的变量副本或一个变量是否在许多线程之间共享。在代理环境中,通常不共享变量。
变量的类型
您可以使用
DECLARE 语句来定义三种类型的变量:
- 外部
- 外部变量(使用 EXTERNAL 关键字定义)也称为用户定义的属性(UDP):请参阅ESQL 中用户定义的属性。它们在消息流的整个生存期存在,并对通过流的所有消息都可见。它们的初始值(可以通过 DECLARE 语句设置)可以在设计时由消息流编辑器修改,或在部署时由 BAR 编辑器修改。它们的值不能由 ESQL 修改。
- 常规
- “常规”变量具有一个消息通过节点时的生存期。它们只对该消息可见。要定义“常规”变量,请省略 EXTERNAL 和 SHARED 关键字。
- 共享
- 共享变量可用于实现消息流中的内存高速缓存,请参阅优化消息流响应时间。共享变量生命期较长,并且可被通过流的多个消息看到,请参阅长生存期变量。共享变量的生存期与声明此变量的执行组进程生存期、流或节点生存期,或者节点 SQL 的生存期相同(谁的生存期最短,谁就可以声明此变量)。。在每个代理启动后,共享变量会在第一条消息通过流或节点时进行初始化。
另请参阅 BEGIN ... END 语句的 ATOMIC 选项。当需要对共享变量进行大量更改时,BEGIN ATOMIC 构造十分有用;并且该构造对于防止其他实例查看数据的中间状态也非常重要。