协议转换/标准化:Biztalk,替代方案?
我们需要从安全系统,火灾报警器,摄像机系统等系统中采取几十种不同的协议,并将它们集成到一个单一的通用协议中。协议转换/标准化:Biztalk,替代方案?
我希望这是一个消息服务器,许多系统可以订阅和通信。
- 轮询和非轮询 “驱动器”(协议转换器)
- 手柄RS232/RS485/TCP
- 可编程像Java托管语言或C#
- 规则引擎能力的 “司机”
biztalk是否适合这个?
有没有开源的替代品?
有没有Java/Java EE的方式来做到这一点?
一方面,系统将是一个SCADA系统,另一方面是一种中间件/消息服务器。
任何想要继续下去的最佳途径,将不胜感激。我知道在驱动程序方面会涉及大量的编程,但是像我一样受到诱惑,从头开始构建整个系统并不合适。
如果您不介意在Java平台上工作,那么在一个名为Apache Camel的开源项目中有一个轻量级协议切换器和Enterprise Integration Patterns的实现。
骆驼已经可以说大部分的common protocols and technologies像files,email,JMS,XMPP等等所以会为这些事情不需要实际的编码。
要添加新的自定义协议,最简单的方法是在MINA component之上构建,该接口负责处理所有网络,套接字处理,线程处理等(例如,NIO与BIO等)。
然后,你只需要扩展它来添加你自己的协议编解码器(如何编组/封装可能使用帧等插座上的消息)。
HL7 component就是这样做的一个例子。更多detail on writing MINA codecs here。
然后,一旦你有你的骆驼组成部分(可以称之为富),那么你可以从任何协议桥使用简单的URI来实现任何的任何其他协议Enterprise Integration Patterns如Content Based Router,Recipient List,Routing Slip等
例如在Java代码中
// route all messages from foo
// to a single queue on JMS
from("foo://somehost:1234").
to("jms:MyQueue");
// route all messages from foo component
// to a queue using a header
from("foo://somehost:1234").
recipientList().
simple("activemq:MyPrefix.${headers.cheese}");
我会避免对SCADA和RS232/RS485,因为这些通常需要实时(或至少低延迟)解决方案的BizTalk。 BizTalk针对高吞吐量进行了优化,但缺点是默认情况下延迟较长。
您可以调整BizTalk以实现低延迟,但此时您会发现您几乎可以绕过BizTalk内置的所有内容,并且可能会阻碍BizTalk的发展。
我建议OpenSCADA。该网站当时是有点乱,但软件是积极利用和积极开发。一个明确的目标是创建一个通用的,独立于技术,接口SCADA用例(尽管此刻的方向或多或少对Java面向[但我们也实验IKVM创建.NET版本])。
所以,你可以使用OpenSCADA与所有的“硬件”设备进行通信,然后创建一个桥梁,你的中间件的其余部分,或者创建一个OpenSCADA桥为你的中间件中的插件。我们已经有一个针对连接到通过串口服务器的局域网连接的读卡机实例的驱动程序。
www.livedata.com
这是一个有点贵,但它是一个基于Python引擎,可以采取一个协议,吐出另一个,它已经建立了多个SCADA协议,如*间委员会,MODBUS,OPC和DNP盒子外面。然后,你可以谈谈你想要什么的下游。
- 约翰
谢谢,我会检查这个。 – JeffV 2009-08-14 11:32:20