我们在生产环境中有四台Biztalk服务器。 sendport配置为在一个文本文件中写入传入消息。该端口每天接收数千条消息。因此,多个主机实例尝试一次写入文件,在一个实例完成写入完整记录之前,另一个实例开始编写新记录,导致数据散布在整个文件中。
我们可以做些什么来解决这个问题?
答案 0 :(得分:3)
...在一个实例完成写入完整记录之前,另一个实例开始编写新记录,导致分散在整个文件中的数据。
我们可以做些什么来解决这个问题?
简单的方法是仅使用单个主机实例将数据写入文件,但是您可能会开始遇到限制问题。或者,您可以使用文件适配器上的“允许缓存写入”选项进行探索,该选项可能会提供一些改进。
但是,我认为你的方法是错误的。您不能指望四个独立且完全断开的进程(不超过4个服务器)可靠地附加到单个文件 - IN ORDER。
因此,我认为你应该重新设计这个解决方案:
您可能需要考虑此单件的单件编排,以确保只有一个轮询 - 写 - 更新过程同时发生。
答案 1 :(得分:1)
如果FIFO很重要,BizTalk已经订购了传送机制(支持FILE适配器),但它的性能成本却很高。
更好的解决方案是让实例写入单个文件,然后使用另一个调度进程(或编排)将它们组合到一个文件中。您可以使用时间戳强制执行FIFO。与前面提到的单例编排相比,这将提供更好的性能和资源利用率。其他选项可以使用队列的任何合适的实现。
答案 2 :(得分:0)
您可以移动到数据库系统而不是文件。这将是非常简单的解决方案,也非常有效。 如果您不想这样做,则必须在应用程序内部实现文件锁定或semaphore,以便新线程等待其他线程完成写入。