公司最近在打造安防设备的对接平台,希望一个平台可以同时支持多个不同品牌的设备,比如华为、???、大华、宇视等
遇到的挑战
- 接口能力千差万别:不同品牌的接口能力不一样,比如告警消息,有的支持回调,有的只能轮询
- 逐个品牌对接:每个品牌都需要单独对接,而且对接方式也不一样,有的提供http接口,有的提供SDK
- 服务不稳定:一些品牌的SDK存在bug,对接效率很低,而且技术支持也不到位
- 硬件环境复杂,故障率高:硬件环境相比软件来说,复杂度很高,比如网络、线缆、电源、重启等
应对方法
实际上就是SOLID原则以及一些扩展机制
- 依赖反转:提供统一的接口层,业务依赖接口,不依赖具体的品牌接口;各个品牌实现接口
- SPI扩展:使用Java SPI机制实现硬件对接??榈牡婉詈?/li>
- 故障隔离:每个硬件提供独立的Client对象,并实现独立的探活、重连、故障上报、故障处理等