
本教程详细介绍了如何在 Mirth Connect 通道中有效区分自动计划轮询与手动触发或部署时发生的轮询事件。通过利用 `globalChannelMap` 和通道的部署脚本,开发者可以设置一个标志来识别通道启动或部署后的首次轮询,从而实现基于轮询类型的条件逻辑,例如选择性地执行不同的目标连接器。
在 Mirth Connect 中,通道的源连接器通常配置为按预设时间表自动轮询数据。然而,在某些场景下,我们需要区分这些自动轮询事件与因通道部署或手动启动而触发的“首次轮询”(即“Poll Once on Start”)。例如,一个通道可能需要在一个时间段内自动执行备份操作,而在另一个时间段或手动触发时执行恢复操作。直接访问 Mirth Connect 内部的轮询设置或事件类型通常并不直接,因此需要一种机制来识别当前轮询的性质。
尝试直接通过 Mirth Connect API 访问源连接器的轮询配置(如 CronProperty 或 PollConnectorProperties)通常会遇到方法不存在的错误,这表明这些内部方法并非设计为在通道脚本中直接调用。此外,简单地根据当前时间与配置的轮询时间进行比较,虽然可行,但会引入冗余配置,因为一旦轮询时间改变,脚本也需要手动更新。
Mirth Connect 提供了一个 globalChannelMap,它是一个通道级别的共享存储,可以在通道的各个脚本(部署脚本、源过滤器/转换器、目标转换器等)之间传递数据。我们可以利用部署脚本在通道启动或部署时设置一个标志,然后在每次轮询时检查并重置该标志,从而判断轮询的类型。
在通道的“部署脚本”(Deploy Script)中,我们可以在 globalChannelMap 中设置一个布尔标志。这个脚本会在通道每次部署或启动时执行一次。
操作步骤:
// 在通道部署或启动时设置一个标志,表示这是新的部署或启动事件
globalChannelMap.put('NEW_DEPLOY', true);
return;这段代码的作用是,每当通道被部署或重新启动时,NEW_DEPLOY 这个键的值就会被设置为 true。
在源连接器的过滤器或转换器脚本中,我们可以检查 NEW_DEPLOY 标志的状态。如果它为 true,则表示当前是部署或启动后的首次轮询;否则,则是常规的计划轮询。检查后,需要立即将该标志重置为 false,以便后续的计划轮询能够被正确识别。
操作步骤:
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; // 如果需要继续处理消息
}在上述代码中:
一旦我们能够区分轮询类型,就可以在通道的后续处理流程中应用条件逻辑。例如,根据 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; // 返回消息以继续处理注意事项:
通过在 Mirth Connect 的部署脚本中设置 globalChannelMap 标志,并在源过滤器/转换器中检查和重置该标志,我们能够有效地识别通道部署/启动后的首次轮询与常规的计划轮询。这种方法提供了一种灵活且可维护的方式来实现基于轮询类型的条件逻辑,从而满足复杂的通道自动化需求。
最佳实践:
以上就是Mirth Connect:区分自动与手动通道轮询事件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号