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

目前的需求是将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);
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值