0

0

Mirth Connect中区分自动与手动轮询以实现条件逻辑

碧海醫心

碧海醫心

发布时间:2025-12-03 17:01:02

|

416人浏览过

|

来源于php中文网

原创

Mirth Connect中区分自动与手动轮询以实现条件逻辑

本文详细介绍了在mirth connect中如何区分通道的自动(计划)轮询与部署时的首次轮询(可视为手动触发),从而实现基于轮询类型的条件逻辑。通过在部署脚本中设置一个全局通道变量作为标志,并在源过滤器/转换器中检查并重置该标志,可以有效识别不同轮询事件,进而控制目的地(destination)的执行,解决诸如备份与恢复任务的场景需求。

Mirth Connect通道轮询类型识别与条件执行指南

在Mirth Connect通道开发中,有时需要根据通道的轮询方式(自动计划轮询或手动/部署时轮询)来执行不同的业务逻辑,例如有条件地启用或禁用某些目的地(Destination)。直接访问Mirth Connect的内部轮询设置通常较为复杂且不推荐。本文将介绍一种通过全局通道变量(Global Channel Map Variable)来有效区分轮询类型并实现条件逻辑的实用方法。

场景背景与挑战

假设一个Mirth Connect通道需要实现文件备份和恢复功能。通道应在每晚自动轮询以备份文件,但在手动触发时(例如,通道部署后首次轮询或手动点击“立即轮询”),则可能需要执行文件恢复操作。核心挑战在于,如何在源过滤器或转换器中识别当前轮询是自动计划的还是手动触发的,从而决定是否执行恢复目的地。

直接尝试通过Packages.com.mirth.connect.donkey.model.channel.CronProperty().getExpression()等方法获取轮询设置通常会遇到方法不存在的错误,因为这些内部API可能不直接暴露或需要特定的实例化过程。

解决方案:利用全局通道变量作标志

Mirth Connect提供了一个名为globalChannelMap的机制,允许在通道内部的各个脚本(部署脚本、源过滤器、源转换器、目的地转换器等)之间共享数据。我们可以利用它设置一个标志位,来区分通道部署后的首次轮询与后续的计划轮询。

1. 在通道部署脚本中设置标志

通道的部署脚本(Deploy Script)在通道每次部署时执行。我们可以在这里设置一个标志,指示通道刚刚被部署。

脚本位置: Mirth Connect Dashboard -> Channels -> 选择你的通道 -> Scripts -> Deploy Script

示例代码:

美图AI开放平台
美图AI开放平台

美图推出的AI人脸图像处理平台

下载
// 在通道部署时,设置一个全局通道变量'NEW_DEPLOY'为true
globalChannelMap.put('NEW_DEPLOY', true);
logger.info("通道已部署,设置 NEW_DEPLOY 标志为 true。");
return;

解释: 当通道被部署或重新部署时,NEW_DEPLOY变量会被设置为true。这标志着通道进入了一个新的运行周期,通常伴随着“Poll Once on Start”选项的触发,可以被视为一种“手动”或“初始化”轮询。

2. 在源过滤器/转换器中检查并重置标志

在通道的源过滤器或源转换器中,我们可以检查NEW_DEPLOY标志的状态。

脚本位置: Mirth Connect Dashboard -> Channels -> 选择你的通道 -> Source -> Filter 或 Transformer

示例代码:

// 获取全局通道变量'NEW_DEPLOY'的值
var isNewDeploy = $gc('NEW_DEPLOY');

if (isNewDeploy == true) {
    logger.info("检测到 NEW_DEPLOY 标志为 true,当前为部署后的首次轮询。");
    // 重置标志,确保后续的计划轮询不会被误判为首次部署轮询
    globalChannelMap.put('NEW_DEPLOY', false);

    // 执行部署后首次轮询的特定逻辑,例如:
    // 移除备份目的地,只执行恢复目的地
    // destinationSet.removeAllExcept(['RecoveryDestination']); 

} else {
    logger.info("检测到 NEW_DEPLOY 标志为 false,当前为计划轮询。");
    // 执行计划轮询的特定逻辑,例如:
    // 移除恢复目的地,只执行备份目的地
    // destinationSet.removeAllExcept(['BackupDestination']);
}

// 继续处理消息
return true; 

解释:

  • 首次轮询: 如果isNewDeploy为true,则表明这是通道部署后的首次轮询。此时,可以执行与“手动”或“初始化”轮询相关的逻辑,例如激活文件恢复目的地,并禁用文件备份目的地。
  • 重置标志: 在执行完首次轮询的逻辑后,务必将NEW_DEPLOY标志重置为false。这是关键一步,它确保了后续的计划轮询不会再次进入“首次部署轮询”的逻辑分支。
  • 计划轮询: 如果isNewDeploy为false,则表明当前是常规的计划轮询。此时,可以执行与“自动”轮询相关的逻辑,例如激活文件备份目的地,并禁用文件恢复目的地。

实际应用与注意事项

  1. 条件目的地执行: 在上述示例代码中,注释掉的部分展示了如何利用destinationSet对象来动态控制目的地的执行。destinationSet.removeAllExcept(['DestinationName'])方法可以移除除指定目的地之外的所有目的地。这使得根据轮询类型选择性地执行备份或恢复操作变得非常灵活。
  2. $gc() 函数:$gc() 是Mirth Connect提供的一个快捷函数,用于从globalChannelMap中获取值。例如,$gc('NEW_DEPLOY')等同于globalChannelMap.get('NEW_DEPLOY')。
  3. 日志记录: 在示例中加入了logger.info()语句,这有助于在Mirth Connect的服务器日志中跟踪轮询类型,方便调试和监控。
  4. “Poll Now”的局限性: 此方法主要区分“Poll Once on Start”(部署后的首次轮询)和后续的计划轮询。如果通道已经在运行,并且用户手动点击了Mirth Connect界面上的“Poll Now”按钮,此方法将无法将其与常规的计划轮询区分开来,因为NEW_DEPLOY标志只在部署时设置。对于需要区分“Poll Now”和计划轮询的场景,可能需要更复杂的外部触发机制或Mirth Connect未来版本提供的更直接的API。然而,对于大多数“手动触发”指的是部署后初始化操作的场景,此方法已足够有效。
  5. 变量命名: 选择清晰、有意义的变量名(如NEW_DEPLOY)可以提高代码的可读性和维护性。

总结

通过在Mirth Connect的部署脚本中巧妙地设置一个全局通道变量,并在源过滤器/转换器中检查并重置该变量,我们可以有效地识别通道是处于部署后的首次轮询状态还是常规的计划轮询状态。这种方法为实现基于轮询类型的复杂条件逻辑提供了强大的支持,尤其适用于需要区分初始化操作与常规自动化任务的场景,如文件备份与恢复。虽然对于所有类型的“手动”轮询(例如,通道运行时手动点击“Poll Now”)可能存在局限性,但它解决了大部分实际应用中区分部署时轮询与计划轮询的需求。

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

38

2025.11.27

Golang channel原理
Golang channel原理

本专题整合了Golang channel通信相关介绍,阅读专题下面的文章了解更多详细内容。

246

2025.11.14

golang channel相关教程
golang channel相关教程

本专题整合了golang处理channel相关教程,阅读专题下面的文章了解更多详细内容。

342

2025.11.17

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

28

2025.12.13

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

127

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

开源物联网开发实例
开源物联网开发实例

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号