0

我的目标是从客户端(可能有防火墙)的后端服务器传输 SNMP 消息,将它们存储在一些快速的数据库服务器中,然后将它们推送到 iOS 设备 (http://bit.ly/vwBf5)。

我的选择是什么?

  1. 封装一个 snmp 消息并通过 http 将其传输到数据库服务器,然后推送到 iOS 并存储在某个数据库中。SNMP 代理 -> 处理服务器(一些处理传入消息的引擎) -> 推送到 iOS

  2. 然后使用一些 snmp 代理来捕获。使用自己的 ActiveMQ 服务器推送到 IOS 并使用一些快速的持久性数据库。代理 -> ActiveMQ 服务器(用于持久性的 Hadoop) -> iOS

在数据库中,我将存储登录名、时间、消息、来源、发送到苹果、服务器 ID 和用户名。大多数情况下,数据库只会写入,但有时它会读取(来自 Web 请求)。

我有哪些选择:Hadoop、Cassandra、Mongo?

4

1 回答 1

1

好吧,有点模糊的场景。但是,既然您已经考虑过 ActiveMQ,请也看看 Apache Camel,它可以满足您的需求(可能是因为它有点难以理解):

Camel 支持读取 SNMP 陷阱(或轮询 SNMP 消息),并支持将消息发送到 APNS 以及多个数据库(包括 MongoDB、Hadoop 以及 JDBC 兼容的 SQL 服务器)。

只是它在 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
于 2012-11-03T20:55:11.263 回答