系统集成中的缓存映射值优化

在进行系统集成时,经常需要将源系统的数据映射到目标系统。在某些情况下,为了正确地插入或更新目标系统的记录,必须先在目标系统上查找相应的值。例如,更新一个带有货币值的支付记录时,需要先获取该货币值(例如USD)的GUID,然后再向目标系统发送另一个请求以更新支付记录。这种频繁调用目标系统的做法被称为“chatty calls”,即对目标系统的调用次数过多,这并不是一个好的方法。

缓存映射值的策略

为了改善这种情况,可以构建一个缓存,并定期刷新它。缓存将包含所有目标映射值,例如示例场景中的各种货币的GUID。

为什么要缓存映射值?

缓存映射值可以显著提高系统性能,至少可以提高两倍。缓存将包含所有目标映射值,例如各种货币的GUID。典型的缓存数据库将包含GUID值,可以通过传递货币代码和目标代码来检索。这个缓存表由编排定期更新,这将帮助减少对目标系统的方法调用量,从而提高性能。

理解值映射缓存模式

步骤1:循环直到缓存中有数据

声明一个布尔标志来决定何时退出主循环。仔细观察编排结构,如果将终止标志设置为false(默认值),编排将在刷新缓存之前等待预定义的时间。

步骤2:编写编排的核心代码

使用异常范围来调用一个web服务,以检索构建值映射缓存的所有值。请注意,这个编排仅用于在自定义集成数据库中构建缓存。

步骤3:缓存刷新周期

使用时间跨度对象来配置编排的延迟形状。这将确定缓存刷新周期之间的时间延迟。

步骤4:不要忘记添加配置条目

需要在BizTalk配置文件或使用SSO DB配置中配置终止标志和延迟时间,以刷新缓存。

是否有更简单的替代方案?

好消息是,确实有更简单的替代方案。特别是使用BizTalk Xref Data,Michael Stephenson的文章对此有详细的描述,可以参考参考资料部分。

  • BizTalk Caching
  • BizTalk Pattern: Mapping Reference Data by Michael Stephenson

编程语言代码示例

以下是使用C#编写的缓存映射值的示例代码:

public void UpdatePaymentRecord(string currencyCode, decimal paymentAmount) { string currencyGUID = GetCurrencyGUID(currencyCode); UpdatePaymentRecordInDestinationSystem(currencyGUID, paymentAmount); } private string GetCurrencyGUID(string currencyCode) { // 从缓存中获取货币GUID string currencyGUID = CacheManager.GetCurrencyGUID(currencyCode); if (string.IsNullOrEmpty(currencyGUID)) { // 如果缓存中没有找到,从目标系统获取 currencyGUID = FetchCurrencyGUIDFromDestinationSystem(currencyCode); // 将获取到的GUID添加到缓存 CacheManager.AddOrUpdateCurrencyGUID(currencyCode, currencyGUID); } return currencyGUID; } private void UpdatePaymentRecordInDestinationSystem(string currencyGUID, decimal paymentAmount) { // 调用目标系统的更新接口 DestinationSystem.UpdatePaymentRecord(currencyGUID, paymentAmount); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485