您的位置:首页 > 其它

通过Kafka Admin API执行并获取结果到客户端

2015-08-09 16:56 323 查看
目前的需求是将kafka管理的相关操作,如创建/删除/修改topic等集成到web 管理端, 但有个问题是执行的时候是打印到服务端标准输出的(控制台),没法返回给前端页面,于是,简单做了下修改,这样便完成了从标准输出获取信息,返回给前端。思路比较简单:

ByteArrayOutputStream bout = new ByteArrayOutputStream();


public Map<String, Object> topicOpt(@RequestParam Long clusterId,
@RequestParam String cmd) {
Cluster cluster = clusterService.findByClusterId(clusterId);
String topicName = null;
String msg = "";

if (cluster!=null && cmd!=null) {
String[] options = cmd.trim().replaceAll("\\s+", ",").split(",");
for (int i=0; i<options.length; i++) {
if (options[i].equals("--zookeeper")) {
options[i+1] = cluster.getZkConnect();
}
if (options[i].equals("--topic")) {
topicName = options[i+1];
}
}
//调用管理命令创建topic
PrintStream out = System.out;
PrintStream ps = new PrintStream(bout);
System.setOut(ps);     // 这样做的原因是从标准输出流中获取命令执行的输出信息,返回给前端
TopicCommand.main(options);
msg = new String(bout.toByteArray());
<span style="white-space:pre">			</span>bout.reset();
System.setOut(out);		// 恢复现场

// 将元数据添加入数据库表中
Topic topic = new Topic();
topic.setClusterId(clusterId);
topic.setName(topicName);
topic.setRemarks(cmd);
topicService.addTopic(topic);
}
return JsonResult.resultSuccess(msg);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: