物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载导读ThingsBoard 的通知系统内置了新平台版本New Platform Version触发器当部署的 ThingsBoard 实例检测到更新服务器发布了新版本时可自动向订阅用户发送版本升级提醒。本篇技术指南以 ThingsBoard 官方帮助文档为核心完整讲解该类通知在主题subject、消息message与按钮button三个维度的模板化templatization与本地化localization机制涵盖全部可用模板参数、后缀修饰符与翻译语法并结合仓库源码揭示其底层解析与替换原理。读完本文你将能熟练编写可复制、可本地化的新版本升级通知模板并理解这些模板参数在通知链路中的真实来源。一、通知模板化同一个模板三种内容维度新平台版本通知与 ThingsBoard 其他类型的通知一样其**主题subject、消息message和按钮button**均支持模板化与本地化。这意味着管理员在通知规则中配置的模板文本可以在发送时被动态替换为当前真实的版本信息与收件人信息。可用的模板参数template parameters列表取决于模板类型——对于新平台版本类通知可用参数分属两组参数含义数据来源latestVersion可用的最新平台版本更新服务从更新服务器拉取的latestVersionlatestVersionReleaseNotesUrl最新版本的发布说明release notes链接更新服务器返回的latestVersionReleaseNotesUrlupgradeInstructionsUrl最新版本的升级指引链接更新服务器返回的upgradeInstructionsUrlcurrentVersion当前部署的平台版本本地实例的currentVersioncurrentVersionReleaseNotesUrl当前版本的发布说明链接更新服务器返回的currentVersionReleaseNotesUrlrecipientTitle收件人称呼优先取姓名若未填写姓名则取邮箱收件人用户资料recipientEmail收件人邮箱收件人用户资料recipientFirstName收件人名收件人用户资料recipientLastName收件人姓收件人用户资料参数名称区分大小写使用${...}包裹例如${recipientFirstName}。从源码结构看前五个版本相关参数的来源可以精确对应到通知信息对象 NewPlatformVersionNotificationInfo.java其getTemplateData()方法将latestVersion、latestVersionReleaseNotesUrl、upgradeInstructionsUrl、currentVersion、currentVersionReleaseNotesUrl五个字段逐一放入模板上下文template context供TemplateUtils在渲染时读取。这五个字段由触发器处理器 NewPlatformVersionTriggerProcessor.java 从UpdateMessage中提取并构建通知信息而UpdateMessage的数据结构定义在 UpdateMessage.java包含updateAvailable、currentVersion、latestVersion、upgradeInstructionsUrl、currentVersionReleaseNotesUrl、latestVersionReleaseNotesUrl六个字段由 DefaultUpdateService.java 的checkUpdates()方法对外提供。后四个recipient*参数则由通知处理上下文在渲染时按收件人动态注入——NotificationProcessingContext.java 中的createTemplateContextForRecipient方法会构建recipientTitle、recipientEmail、recipientFirstName、recipientLastName四个上下文项其中标题的取值规则为姓名名姓已填写时优先使用否则回退为邮箱。二、模板语法与三个常用修饰后缀参数名必须使用${...}包裹。在此基础上你可以通过**后缀suffix**修改参数值的展示形式语法为:suffix后缀作用示例upperCase将参数值转为大写${recipientFirstName:upperCase}lowerCase将参数值转为小写${recipientFirstName:lowerCase}capitalize将参数值的首字母大写${recipientFirstName:capitalize}例如收件人名john在三种后缀下分别渲染为JOHN、john、John。底层实现上述修饰逻辑由通用模板工具类 TemplateUtils.java 实现。其核心是一个正则表达式\$\{(.?)(:[a-zA-Z])?\}用于匹配${参数名}或${参数名:后缀}两种形态随后通过内置函数映射表FUNCTIONSupperCase→String::toUpperCase、lowerCase→String::toLowerCase、capitalize→StringUtils::capitalize完成值变换。一个值得注意的细节若模板中引用了上下文中不存在的键且无可用函数处理processTemplate会保留原始${...}文本而不报错因此编写模板时应确保参数名拼写正确。三、本地化translate后缀与翻译键通知模板同样支持多语言本地化方法是在模板中使用translate后缀并传入翻译键${some.translation.key:translate}ThingsBoard 会从收件人的语言偏好中加载对应语言的翻译值进行替换语言环境locale取自收件人的个人资料设置若未设置则默认使用英语English。例如若你在自定义翻译文件中定义了翻译键custom.notifications.greetings其值为Hello, ${recipientFirstName}!那么模板中写入${custom.notifications.greetings:translate}发送时将被变换为假设收件人名JohnHello, John!这里体现了模板的递归能力翻译键对应的值本身可以包含其他模板参数如${recipientFirstName}会在翻译展开后继续参与替换。底层实现translate并非TemplateUtils的内置函数而是由通知处理链路作为自定义函数注入的。在 NotificationProcessingContext.java 的processTemplate方法中当检测到收件人 locale 且存在翻译提供者时会构建Map.of(translate, key - translate(key, locale))作为自定义函数表传入TemplateUtils.processTemplateTemplateUtils对自定义函数的处理是先用翻译键查出翻译文本再将该文本作为新模板递归执行参数替换见processTemplate(value, context, null)调用。翻译值本身通过translationProvider按 locale 从翻译 JSON 中按点分路径key path读取。递归替换逻辑对应TemplateUtils中的customFunctions分支这也解释了为什么${custom.notifications.greetings:translate}能正确展开为Hello, John!。四、完整示例从 3.4.4 升级到 3.5.0 的通知文案官方帮助文档给出了一个直观示例假设最新发布了3.5.0版本而当前部署版本为3.4.4则模板New version ${latestVersion} is available. Current version is ${currentVersion}将被渲染为New version 3.5.0 is available. Current version is 3.4.4在此基础上组合前文语法一个更完整的通知模板可以写成消息正文示例{:copy-code}为 ThingsBoard UI 中一键复制代码的标记实际使用时可保留Hello, ${recipientFirstName:capitalize}! A new ThingsBoard version ${latestVersion} is available. Current version: ${currentVersion} Release notes: ${latestVersionReleaseNotesUrl} Upgrade instructions: ${upgradeInstructionsUrl}渲染结果示例Hello, John! A new ThingsBoard version 3.5.0 is available. Current version: 3.4.4 Release notes: https://thingsboard.io/docs/releases/rel-3.5.0/ Upgrade instructions: https://thingsboard.io/docs/user-guide/install/upgrade-instructions/五、深入理解通知触发的完整链路为了让模板化实践有的放矢这里梳理新平台版本通知从触发到渲染的完整链路与上述模板参数一一对应更新检测DefaultUpdateService定时与 ThingsBoard 更新服务器通信将返回的版本信息封装为UpdateMessage包含latestVersion、currentVersion、两个 release notes URL 与upgradeInstructionsUrl并通过checkUpdates()对外暴露触发器匹配NewPlatformVersionTriggerProcessor收到NewPlatformVersionTrigger后先通过matchesFilter判断updateInfo.isUpdateAvailable()即UpdateMessage.updateAvailable字段只有检测到新版本时才继续随后调用constructNotificationInfo将版本信息组装为NewPlatformVersionNotificationInfo模板上下文构建NotificationProcessingContext在初始化时对每个启用状态的投递渠道模板执行首轮处理渲染与收件人无关的不可变参数并在为具体收件人渲染时合并recipientTitle、recipientEmail、recipientFirstName、recipientLastName四个收件人上下文项最终渲染TemplateUtils.processTemplate按正则逐项替换${...}应用大小写/首字母大写等后缀并对translate后缀执行翻译键查找与递归模板展开最终生成投递给每个收件人的个性化、本地化通知内容。该链路涉及的完整源码路径触发器处理application/src/main/java/org/thingsboard/server/service/notification/rule/trigger/NewPlatformVersionTriggerProcessor.java通知信息与模板数据common/data/src/main/java/org/thingsboard/server/common/data/notification/info/NewPlatformVersionNotificationInfo.java更新消息模型common/data/src/main/java/org/thingsboard/server/common/data/UpdateMessage.java更新检测服务application/src/main/java/org/thingsboard/server/service/update/DefaultUpdateService.java模板解析引擎common/data/src/main/java/org/thingsboard/server/common/data/util/TemplateUtils.java通知渲染上下文application/src/main/java/org/thingsboard/server/service/notification/NotificationProcessingContext.java结语新平台版本通知的模板化能力让管理员可以在不依赖硬编码版本号的前提下编写出自动跟随真实版本数据、自动适配收件人语言与称谓的升级提醒。掌握${latestVersion}、${currentVersion}等版本参数配合upperCase、lowerCase、capitalize与translate后缀即可在 ThingsBoard 的通知规则中快速构建专业、可维护、多语言友好的版本升级通知模板。赞分享物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载相关推荐ThingsBoard 告警通知模板化参数、后缀修饰与多语言本地化完全指南ThingsBoard 告警通知模板化参数、后缀修饰与多语言本地化完全指南 本指南系统讲解 ThingsBoard 通知系统中的告警Alarm通知模板化机物联网后端数据可视化消息队列pytest 预发布公告模板解析从 release.pre.rst 到 RC 版本发布的完整流水线pytest 预发布公告模板解析从 release.pre.rst 到 RC 版本发布的完整流水线 导读 pytest 在正式发布大版本之前会先发布 RC测试开发工具ThingsBoard 通知模板化指南${} 参数、大小写修饰与多语言本地化ThingsBoard 通知模板化指南${} 参数、大小写修饰与多语言本地化 本指南讲解 ThingsBoard 物联网平台中通知模板的通用模板化templ物联网后端数据可视化消息队列创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考