kafka消费者类百搭

该博客讲述了如何使用Kafka消费者监听特定主题,将接收到的JSON字符串转换为实体类,进一步处理数据并将结果发送到另一个Kafka主题。过程中涉及了JSON转换、Siddhi输入创建及监听回调的实现。
摘要由CSDN通过智能技术生成
kafka消费者类。运用JSON.toJSONString(String text,Class<T> clazz)将json类型text转换成实体类clazz类型。然后进行数据的处理更新。再提交给kafka并执行监听回调。
   @KafkaListener(topicPattern = Channels.PROPERTY_POST_CHANNEL + "-.*", groupId = "xiot-alarm")
    public void recvPropertyPost(List<ConsumerRecord<String, String>> records, Acknowledgment ack){

        List<PropertyPostMessage> messageList = records.stream().map(e -> JSON.parseObject(e.value(), PropertyPostMessage.class)).collect(Collectors.toList());
        log.info("topic:property-post 收到消息:" + JSON.toJSONString(messageList, SerializerFeature.WriteMapNullValue));

        try{
            //逐条解析消息
            for (PropertyPostMessage message : messageList){
                SiddhiInput siddhiInput = new SiddhiInput();
                siddhiInput.setProdNo(message.getProductNo());
                siddhiInput.setDevNo(message.getDeviceNo());
                siddhiInput.setTimestamp(message.getTimestamp());

                Map<String, Object> properties = message.getProperties();
                for (Map.Entry<String, Object> entry : properties.entrySet()) {
                    siddhiInput.setMetric(entry.getKey());
                    siddhiInput.setValue(entry.getValue().toString());

                    //发送到topic:alarm-siddhi-input
                    ListenableFuture<SendResult<String, String>> future =
                            kafkaTemplate.send(Channels.ALARM_SIDDHI_INPUT_CHANNEL, JSON.toJSONString(siddhiInput));
                    future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
                        @Override
                        public void onFailure(Throwable ex) {
                            log.error("向topic:alarm-siddhi-input 发送消息失败:" + ex.getMessage());
                        }

                        @Override
                        public void onSuccess(SendResult<String, String> output) {
                            log.info("向topic:alarm-siddhi-input 发送消息成功:" + output);
                        }
                    });
                }
            }

            //手动ack
            ack.acknowledge();
        }catch (Exception e){
            e.printStackTrace();
            throw e;
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值