0

0

Mirth Connect:区分自动与手动通道轮询以实现条件性目的地执行

霞舞

霞舞

发布时间:2025-12-03 17:04:10

|

835人浏览过

|

来源于php中文网

原创

Mirth Connect:区分自动与手动通道轮询以实现条件性目的地执行

本教程详细介绍了如何在mirth connect通道中区分自动(计划性)轮询和手动(部署时)轮询。通过在部署脚本中设置一个全局通道变量,并在源过滤器/转换器中检查该变量,可以有效地识别轮询类型。这使得开发者能够根据轮询来源,灵活地控制目的地(destination)的执行逻辑,从而实现更精细的通道行为管理。

理解通道轮询的场景与挑战

在Mirth Connect中,通道的源连接器(Source Connector)通常配置为周期性地轮询外部资源(如文件系统、数据库等)以获取消息。轮询可以分为两种主要类型:

  1. 自动(计划性)轮询:根据Cron表达式或预设间隔自动执行,通常用于夜间备份、定时同步等场景。
  2. 手动轮询
    • 部署时轮询:当通道部署或重新部署时,如果勾选了“Poll Once on Start”选项,会立即执行一次轮询。这常被视为一种初始的手动触发。
    • 按需轮询:用户通过Mirth Connect仪表板手动点击“Poll Now”按钮触发的轮询。

开发人员有时需要根据轮询的类型来执行不同的业务逻辑。例如,一个通道可能需要在夜间自动备份文件,而在手动触发时执行文件恢复操作。直接从源过滤器或转换器中获取当前轮询是自动还是手动的状态,Mirth Connect并没有提供一个直接的API或内置变量。

利用全局通道变量区分轮询类型

为了解决上述挑战,我们可以利用Mirth Connect的全局通道变量(globalChannelMap)机制,结合通道的部署脚本和源处理脚本来实现轮询类型的区分。核心思路是:在通道部署时设置一个标志,然后在每次轮询时检查并根据该标志判断是否为“部署时轮询”。

步骤一:在部署脚本中初始化标志

当通道部署或重新部署时,Mirth Connect会执行通道的部署脚本(Deploy Script)。我们可以在这里设置一个全局通道变量作为“新部署”的标志。

  1. 打开你的Mirth Connect 通道配置。

  2. 导航到“Scripts”选项卡。

  3. 在“Deploy Script”区域中添加以下代码:

    // 设置一个全局通道变量,标记通道刚刚部署
    globalChannelMap.put('NEW_DEPLOY', true);
    return;

    这段代码的目的是在通道每次部署时,将NEW_DEPLOY这个键的值设置为true并存储在当前通道的全局映射中。这意味着通道在刚刚部署后,NEW_DEPLOY标志将为真。

步骤二:在源过滤器/转换器中检测轮询类型

在源连接器的过滤器或转换器脚本中(例如,在“Source Transformer”或“Source Filter”中),我们可以在每次消息处理前检查NEW_DEPLOY变量的值。

  1. 导航到“Source”选项卡。

    ClipDrop
    ClipDrop

    Stability.AI出品的图片处理系列工具(背景移除、图片放大、打光)

    下载
  2. 选择“Transformer”或“Filter”子选项卡。

  3. 在相应的脚本区域中添加以下代码:

    if ($gc('NEW_DEPLOY') == true) {
        // 记录日志,表明这是一个部署时轮询
        logger.info("NEW_DEPLOY WAS " + $gc('NEW_DEPLOY') + ", 这次轮询发生在部署之后 (Poll On Deploy)");
        // 重置标志,以便后续的轮询被识别为计划性轮询
        globalChannelMap.put('NEW_DEPLOY', false);
        // 在这里可以添加针对“部署时轮询”的特定逻辑
        // 例如,设置一个变量来控制目的地执行
        channelMap.put('pollType', 'DEPLOY_POLL');
    } else {
        // 记录日志,表明这是一个计划性轮询
        logger.info("NEW_DEPLOY WAS " + $gc('NEW_DEPLOY') + ", 这次轮询是计划性的");
        // 在这里可以添加针对“计划性轮询”的特定逻辑
        channelMap.put('pollType', 'SCHEDULED_POLL');
    }

    这段脚本首先检查NEW_DEPLOY变量。如果为true,则表明这是通道部署后的第一次轮询(通常对应“Poll Once on Start”)。脚本会记录日志,然后将NEW_DEPLOY重置为false,确保后续的轮询不会再次被误判为部署时轮询。同时,我们将轮询类型存储在channelMap中,方便后续的目的地使用。

步骤三:根据轮询类型控制目的地执行

在目的地的过滤器或转换器中,你可以通过检查channelMap.get('pollType')的值来决定是否执行该目的地。

例如,如果你有一个用于恢复文件的目的地,你可能只希望在DEPLOY_POLL时执行它:

在目的地过滤器中:

// 只有当轮询类型是部署时轮询时才通过过滤器
if (channelMap.get('pollType') == 'DEPLOY_POLL') {
    return true; // 允许消息通过,执行此目的地
}
return false; // 阻止消息通过,不执行此目的地

或者,你可以在源转换器中动态地移除不需要的目的地:

// 在源转换器中,根据 pollType 移除不需要的目的地
if (channelMap.get('pollType') == 'SCHEDULED_POLL') {
    // 假设 'RestoreDestination' 是恢复文件的目的地名称
    destinationSet.remove('RestoreDestination');
}

注意事项与局限性

  • “Poll Once on Start”的关联:此方法主要用于区分通道部署后的第一次轮询(通常与“Poll Once on Start”选项相关)和后续的计划性轮询。
  • 手动“Poll Now”的识别:如果用户在通道部署后,通过Mirth Connect仪表板手动点击“Poll Now”按钮触发轮询,此方法将无法将其与计划性轮询区分开来,因为NEW_DEPLOY标志已经被重置为false。如果需要区分所有类型的手动触发,可能需要更复杂的机制(例如,结合外部API调用或更高级的Mirth Connect事件监听)。
  • 通道重部署:每次通道重新部署时,NEW_DEPLOY标志都会被重置为true,因此部署后的第一次轮询将再次被识别为“部署时轮询”。
  • 日志记录:在脚本中使用logger.info()可以有效地在Mirth Connect服务器日志中查看轮询类型,这对于调试和监控非常有帮助。
  • 变量作用域:globalChannelMap变量在通道的生命周期内持续存在,而channelMap变量则针对每条消息的生命周期。根据你的需求选择合适的变量作用域。

总结

通过在Mirth Connect的部署脚本和源处理脚本中巧妙地利用全局通道变量,我们可以有效地识别通道部署后的首次轮询与后续的计划性轮询。这种方法提供了一种灵活的机制,使得开发者能够根据轮询的来源,精确地控制不同目的地的执行行为,从而更好地满足复杂的业务逻辑需求。虽然对于所有类型的“手动”轮询识别存在一定局限性,但对于区分部署时的初始化操作和常规的自动化流程,该方案非常实用且易于实现。

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

348

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2074

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

347

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

255

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

323

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

410

2023.10.16

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

398

2023.10.16

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

219

2023.10.19

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

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

72

2026.01.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.2万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

NumPy 教程
NumPy 教程

共44课时 | 2.9万人学习

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

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