通过 MSMQ 发送文件
Posted
技术标签:
【中文标题】通过 MSMQ 发送文件【英文标题】:Sending files over MSMQ 【发布时间】:2012-09-16 19:26:21 【问题描述】:在零售场景中,每个商店在一天结束时向后端系统报告他们的日常交易。今天,一个包含日常交易和一些其他元信息的文件使用 FTP 从商店传输到后端。我目前正在研究用其他东西替换 FTP。 MSMQ 已被建议作为替代传输机制。所以我的问题是,我们是否需要编写一个自定义的 Windows 服务,将日常事务文件粘贴到消息对象中并在途中发送它,或者 MSMQ 中是否有任何现成的机制来处理这个问题?
另外,由于我们要传输的文件对于大型存储可能达到 5-6 Mb,我们应该排除 MSMQ 吗?在那种情况下,我们应该调查其他建议的技术吗?
干杯!
【问题讨论】:
你能可靠地将这些文件压缩到 4mb 以下吗? 【参考方案1】:您可以查看 IBM Sterling Managed File Transfer 和 WebSphere MQ Managed File Transfer 产品。
如果您需要消息传递和文件传输功能,可以考虑使用 WebSphere MQ MFT。另一方面,如果您的要求只是文件传输,那么您可以查看 Sterling MFT。
【讨论】:
知道 IBM Sterling MFT 的定价模型是什么样的吗?客户目前主要运行基于 Microsoft 的系统。所以他们肯定会在微软堆栈上寻找类似的东西 抱歉,没有足够的知识来谈论定价模型【参考方案2】:NServiceBus 为这种情况提供了一个很好的 MSMQ 抽象。您可以获得 MSMQ 的可靠消息传递方面,以及用于定义消息的非常好的编程模型。
但是,MSMQ 的消息大小限制为 4MB,您可以在 NServiceBus 中通过两种方式处理此问题:
-
NServiceBus 有一个称为数据总线的概念,它接收消息中的大附件并使用另一种方法可靠地传输它们。这是由基础架构处理的,就您的消息处理程序而言,数据就在那里。
您可以将有效负载分解为更小的原子消息并将它们作为普通消息发送。 NServiceBus 基础设施将确保它们都到达目的地并得到处理。我会推荐这种方法,除非将整个巨大的数据转储作为一个原子事务处理是绝对关键的。
要注意的另一件事是,您每晚进行转储这一事实可能是以前系统的限制。使用 NServiceBus 可以更改系统,以便以更即时的方式发送这些信息位,这将始终产生更多最新数据,这可能是业务的一大胜利。
【讨论】:
我们很幸运地采用了建议的分块方法。让我们保持在 4MB 以下,但不那么健谈。【参考方案3】:如果商店位于不同的网络上并通过 Internet 进行通信,则 MSMQ 不是一个真正的选择。 NServiceBus 提供了gateway 的概念,它允许通过 HTTP 或 HTTPS 异步传输 MSMQ 消息。
【讨论】:
【参考方案4】:通过消息传输发送文件并非易事。如果您将整个文件放入单个消息中,您可以获得所需的原子性,但调整消息提供程序以适应消息大小的广泛变化可能具有挑战性。如果所有文件的大小大致相同,则每条消息一个是最简单的解决方案。
另一方面,您可以将文件拆分为多条消息,但您必须按照正确的顺序重新组合它们,包括检测和重新发送丢失段的协议,根据文件检查接收到的文件的完整性发送等。您可能还想检查两端的文件在传输过程中是否没有更改。
对于这些系统中的任何一个,您还需要系统足够智能,以管理在正常和异常情况下发送和接收文件的处置、记录传输等。
因此,在考虑是否迁移到消息传递时,两个最佳选择是本地迁移到消息传递并完全放弃文件,或者使用在您选择的消息传递提供程序上运行的企业管理文件传输解决方案。如果您希望通过强大的异常处理和报告正确地完成它,那么从长远来看,没有任何现成的 MFT 产品会像您自己开发它那样昂贵。
【讨论】:
感谢您的回复!在以 Microsoft 为中心的环境中推荐任何 MFT 产品?我知道客户已经投资了 BizTalk,但不确定它在该领域的能力...... 全面披露:我的雇主是此类产品的供应商。也就是说,WebSphere MQ V7.5 Managed File Transfer 将是一个很好的候选者,在 BizTalk 环境中,我建议仔细研究 WebSphere Message Broker V8。 WMB 可以处理所有文件 I/O,并且它最近还与 Visual Studio 紧密集成,因此程序员可以根据需要选择文件或消息并将它们直接集成到应用程序中。 WMB 的新许可允许您在购买一个完整许可时将其安装在所有开发人员桌面上,无需额外费用,即使是入门级软件包也是如此。以上是关于通过 MSMQ 发送文件的主要内容,如果未能解决你的问题,请参考以下文章