我的目标是从客户端(可能是防火墙)的后端服务器传输SNMP消息,将它们存储在某个快速数据库服务器中,然后将它们推送到iOS设备(http://bit.ly/vwBf5)。 / p>
我的选择是什么?
封装snmp消息并通过http将其传输到数据库服务器,然后推送到iOS并存储在某个数据库中。 SNMP代理 - >处理服务器(某些引擎处理传入的消息) - >推送到iOS
然后使用一些snmp代理来捕获。使用自己的ActiveMQ服务器推送到IOS使用一些快速持久性数据库。代理 - > ActiveMQ服务器(Hadoop for persistance) - > iOS
在db中,我将存储登录,时间,消息,来源,发送到apple,服务器ID和用户名。大多数情况下,数据库只会写入,但有时会读取(来自Web请求)。
我有什么选择:Hadoop,Cassandra,Mongo?
答案 0 :(得分:1)
好的,有点模糊的情景。但是,既然你已经考虑过ActiveMQ,请看看Apache Camel,它有点像你想要的那样(可能,因为它有点难以理解):
Camel has support读取SNMP陷阱(或对SNMP消息进行轮询),以及支持向APNS以及多个数据库(包括MongoDB,Hadoop以及JDBC兼容的SQL服务器)发送消息。 / p>
仅举例说明它在Camel代码中的外观(请注意,您需要一些自定义格式的消息以及配置才能使用它,当然,请不要尝试按原样运行此代码):
from("snmp:127.0.0.1:162?protocol=udp&type=TRAP") // from SNMP trap
.convertBodyTo(String.class)
.setHeader(ApnsConstants.HEADER_TOKENS, constant(IOS_DEVICE_TOKEN))
.to("apns:notify") // TO iOS
.to("mongodb:myDb?database=mySnmp&collection=traps&operation=insert"); // To DB
或者,如果您觉得由于陷阱的高峰负荷而必须进行一些升级,您也可以这样做:
from("snmp:127.0.0.1:162?protocol=udp&type=TRAP") // from SNMP trap
.convertBodyTo(String.class)
.to("seda:stagedProcess"); //
from("sead:stagedProcess")
.setHeader(ApnsConstants.HEADER_TOKENS, constant(IOS_DEVICE_TOKEN))
.to("apns:notify") // TO iOS
.to("mongodb:myDb?database=mySnmp&collection=traps&operation=insert"); // To DB