缓存导致执行批处理的Mirth通道

时间:2017-05-02 10:33:09

标签: csv batch-processing mirth

我在欢乐中遇到了一个问题。我有一个Mirth频道,它将收到.csv文件我正在该频道中执行批处理。因此,channel将读取.csv文件中的每一行。我正在传播每一行并转换为SOAP以与另一端进行通信。这很好。

我想再次整合.csv文件中的所有行,并创建一个新的.csv文件,并将其作为附件发送给发件人。我想出了一种附加.csv文件和发送邮件的方法。但我无法在同一个频道中合并行(缓存行结果)。

请告诉我怎么做?

2 个答案:

答案 0 :(得分:1)

当然,这在一个渠道中在技术上是可行的,但您必须愿意在内存中缓存消息,以便您可以在最后整合所有消息。

在部署脚本中,初始化地图:

if (!globalChannelMap.containsKey('csvMap')) {
    $gc('csvMap', Maps.map());
}

在预处理器中,将每条消息添加到合并的CSV(基本上不批处理批处理消息):

var csvMap = $('csvMap');
var batchId = $('batchId');
if ($('batchSequenceId') == 1) {
    csvMap.put(batchId, new java.lang.String(message));
} else {
    csvMap.put(batchId, csvMap.get(batchId).concat(message));
}
return message;

然后在您的SMTP发件人目的地上添加过滤规则,使其仅在批处理中的最后一条消息处理时触发:

Filter Rule

在同一目的地,添加一个变换器步骤,将整合的CSV从全局通道映射中拉出,并将转换后的数据设置为:

msg = SerializerFactory.getSerializer('DELIMITED').toXML($('csvMap').remove($('batchId')));

你去吧。您的频道将继续一次处理一行,但当它处理批量中的最后行时,它也会触发此其他目的地。我将附加频道(从3.5.0导出)以用于说明:Example - Consolidate CSV.xml

当然,另一种更为理智的做法是将其分成两个通道。上游通道不进行任何批处理,但会发送到您的下游通道以及发送该电子邮件。下游渠道将启用批处理,以及您移动Web服务发件人的位置。

答案 1 :(得分:0)

我不确定这是否可行。您是否考虑将行保存到文件中(追加每一行),并将另一个通道作为文件阅读器来获取该文件?确保将老化设置为一分钟,以便在写入文件时不会抓取文件。