0

0

Mirth Connect:区分自动与手动通道轮询事件

碧海醫心

碧海醫心

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

|

766人浏览过

|

来源于php中文网

原创

mirth connect:区分自动与手动通道轮询事件

本教程详细介绍了如何在 Mirth Connect 通道中有效区分自动计划轮询与手动触发或部署时发生的轮询事件。通过利用 `globalChannelMap` 和通道的部署脚本,开发者可以设置一个标志来识别通道启动或部署后的首次轮询,从而实现基于轮询类型的条件逻辑,例如选择性地执行不同的目标连接器。

引言:区分 Mirth Connect 轮询事件的必要性

在 Mirth Connect 中,通道的源连接器通常配置为按预设时间表自动轮询数据。然而,在某些场景下,我们需要区分这些自动轮询事件与因通道部署或手动启动而触发的“首次轮询”(即“Poll Once on Start”)。例如,一个通道可能需要在一个时间段内自动执行备份操作,而在另一个时间段或手动触发时执行恢复操作。直接访问 Mirth Connect 内部的轮询设置或事件类型通常并不直接,因此需要一种机制来识别当前轮询的性质。

挑战与常见误区

尝试直接通过 Mirth Connect API 访问源连接器的轮询配置(如 CronProperty 或 PollConnectorProperties)通常会遇到方法不存在的错误,这表明这些内部方法并非设计为在通道脚本中直接调用。此外,简单地根据当前时间与配置的轮询时间进行比较,虽然可行,但会引入冗余配置,因为一旦轮询时间改变,脚本也需要手动更新。

解决方案:利用 globalChannelMap 进行轮询类型识别

Mirth Connect 提供了一个 globalChannelMap,它是一个通道级别的共享存储,可以在通道的各个脚本(部署脚本、源过滤器/转换器、目标转换器等)之间传递数据。我们可以利用部署脚本在通道启动或部署时设置一个标志,然后在每次轮询时检查并重置该标志,从而判断轮询的类型。

步骤一:在通道部署时设置标志

在通道的“部署脚本”(Deploy Script)中,我们可以在 globalChannelMap 中设置一个布尔标志。这个脚本会在通道每次部署或启动时执行一次。

操作步骤:

Nimo.space
Nimo.space

智能画布式AI工作台

下载
  1. 打开你的 Mirth Connect 通道。
  2. 导航到“脚本”选项卡。
  3. 在“部署脚本”区域,添加以下代码:
// 在通道部署或启动时设置一个标志,表示这是新的部署或启动事件
globalChannelMap.put('NEW_DEPLOY', true);
return;

这段代码的作用是,每当通道被部署或重新启动时,NEW_DEPLOY 这个键的值就会被设置为 true。

步骤二:在源过滤器/转换器中检查并重置标志

在源连接器的过滤器或转换器脚本中,我们可以检查 NEW_DEPLOY 标志的状态。如果它为 true,则表示当前是部署或启动后的首次轮询;否则,则是常规的计划轮询。检查后,需要立即将该标志重置为 false,以便后续的计划轮询能够被正确识别。

操作步骤:

  1. 打开你的 Mirth Connect 通道。
  2. 导航到“源”连接器,然后进入“过滤器”或“转换器”选项卡。
  3. 在合适的脚本区域(例如,源转换器脚本),添加以下代码:
if ($gc('NEW_DEPLOY') == true) {
    logger.info("NEW_DEPLOY WAS " + $gc('NEW_DEPLOY') + ", 当前为部署/启动后的首次轮询");
    // 重置标志,确保后续轮询被识别为计划轮询
    globalChannelMap.put('NEW_DEPLOY', false);
    // 在这里执行与首次轮询(例如,手动触发或部署后)相关的逻辑
    // 示例:执行恢复目标
    // return true; // 如果需要继续处理消息
} else {
    logger.info("NEW_DEPLOY WAS " + $gc('NEW_DEPLOY') + ", 当前为计划轮询");
    // 在这里执行与计划轮询相关的逻辑
    // 示例:执行备份目标,或跳过恢复目标
    // return true; // 如果需要继续处理消息
}

在上述代码中:

  • $gc('NEW_DEPLOY') 是获取 globalChannelMap 中 NEW_DEPLOY 键值的快捷方式。
  • logger.info() 用于在 Mirth Connect 日志中输出信息,便于调试和监控。
  • 关键在于 globalChannelMap.put('NEW_DEPLOY', false); 这一行,它在首次轮询逻辑执行后立即将标志重置,确保后续的自动轮询不会再被误判为“新部署”事件。

步骤三:根据轮询类型执行条件逻辑

一旦我们能够区分轮询类型,就可以在通道的后续处理流程中应用条件逻辑。例如,根据 NEW_DEPLOY 标志的状态来选择性地启用或禁用某些目标连接器。

示例:条件性地执行目标连接器

假设我们有一个“备份目标”和一个“恢复目标”。我们希望在部署/启动后的首次轮询时执行“恢复目标”,而在计划轮询时执行“备份目标”。

在源转换器中,我们可以这样修改消息的 destinationSet:

// 假设 'RestoreDestination' 和 'BackupDestination' 是你的目标连接器的名称或 ID
var currentDestinations = destinationSet; // 获取当前所有目标

if ($gc('NEW_DEPLOY') == true) {
    logger.info("当前为部署/启动后的首次轮询,执行恢复操作。");
    globalChannelMap.put('NEW_DEPLOY', false); // 重置标志

    // 清空现有目标,只添加恢复目标
    destinationSet.clear();
    destinationSet.add('RestoreDestination'); // 假设这是恢复目标的名称或ID
} else {
    logger.info("当前为计划轮询,执行备份操作。");
    // 清空现有目标,只添加备份目标
    destinationSet.clear();
    destinationSet.add('BackupDestination'); // 假设这是备份目标的名称或ID
}

return message; // 返回消息以继续处理

注意事项:

  • destinationSet.add() 方法需要目标连接器的名称或 ID。你可以在目标连接器的“常规”选项卡中找到其名称。
  • 这种方法允许你在不禁用或重新部署整个通道的情况下,根据轮询事件的性质动态调整执行路径。

总结与最佳实践

通过在 Mirth Connect 的部署脚本中设置 globalChannelMap 标志,并在源过滤器/转换器中检查和重置该标志,我们能够有效地识别通道部署/启动后的首次轮询与常规的计划轮询。这种方法提供了一种灵活且可维护的方式来实现基于轮询类型的条件逻辑,从而满足复杂的通道自动化需求。

最佳实践:

  • 清晰命名: 为 globalChannelMap 中的变量选择清晰、描述性的名称。
  • 日志记录: 使用 logger.info() 记录轮询类型,有助于调试和监控通道行为。
  • 统一管理: 如果有多个通道需要类似逻辑,可以考虑将此模式封装为 Mirth Connect 的共享库函数。
  • 考虑手动“Poll Now”: 此方案主要区分“Poll Once on Start”和计划轮询。如果用户在通道已运行且 NEW_DEPLOY 为 false 的情况下,手动点击 Mirth Connect 仪表板上的“Poll Now”按钮,此方案会将其视为计划轮询。如果需要区分这种真正的“手动立即轮询”与计划轮询,可能需要更复杂的机制,例如结合外部触发器或 Mirth Connect 自身未直接暴露的内部状态。然而,对于大多数“部署/启动时一次性操作”与“日常计划操作”的区分场景,本方案已足够。

相关专题

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

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

30

2025.12.13

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

15

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.19

java接口相关教程
java接口相关教程

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

2

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

13

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

93

2026.01.18

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

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

112

2026.01.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
誉天教育RHCE视频教程
誉天教育RHCE视频教程

共9课时 | 1.4万人学习

尚观Linux RHCE视频教程(二)
尚观Linux RHCE视频教程(二)

共34课时 | 5.7万人学习

尚观RHCE视频教程(一)
尚观RHCE视频教程(一)

共28课时 | 4.8万人学习

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

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