java kafka消息的发送与接收

本文介绍如何使用Java实现Kafka消息的发送与接收。通过一个工具类封装了生产者与消费者的创建过程,并展示了如何将自定义对象序列化为JSON字符串发送到Kafka以及如何反序列化接收到的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java kafka消息的发送与接收

 

     消息队列在java EE级开发是很常用到的工具之一,在众多消息队列当中,active mq与kafka相对比较受开发者的喜爱,那么kafka是怎样实现消息的发送与接收呢?这里我们的消息通过一个实体类对象来进行封装,前提是你服务器上已经搭建好kafka环境,整个代码如下:
       1、kafka工具类,实现了生产者消费者消息的封装,以及发送消息到kafka上和从kafka上获取消息。
[java]  view plain  copy
 
  1. package com.starit.ipran.kafka;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Arrays;  
  5. import java.util.Date;  
  6. import java.util.HashMap;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9. import java.util.Properties;  
  10.   
  11. import org.apache.kafka.clients.consumer.Consumer;  
  12. import org.apache.kafka.clients.consumer.ConsumerRecord;  
  13. import org.apache.kafka.clients.consumer.ConsumerRecords;  
  14. import org.apache.kafka.clients.consumer.KafkaConsumer;  
  15. import org.apache.kafka.clients.producer.KafkaProducer;  
  16. import org.apache.kafka.clients.producer.Producer;  
  17. import org.apache.kafka.clients.producer.ProducerRecord;  
  18. import org.slf4j.Logger;  
  19. import org.slf4j.LoggerFactory;  
  20.   
  21. import com.alibaba.fastjson.JSON;  
  22. import com.alibaba.fastjson.JSONObject;  
  23. import com.starit.ipran.load.Constants;  
  24. import com.starit.ipran.model.IpranAlarm;  
  25.   
  26. public class KafkaUtils {  
  27.       
  28.     private final static Logger LOGGER = LoggerFactory.getLogger(KafkaUtils.class);  
  29.       
  30.     private static Producer<String, String> producer;  
  31.     private static Consumer<String, String> consumer;  
  32.   
  33.     private KafkaUtils() {  
  34.   
  35.     }  
  36.   
  37.     /** 
  38.      * 生产者,注意kafka生产者不能够从代码上生成主题,只有在服务器上用命令生成 
  39.      */  
  40.     static {  
  41.         Properties props = new Properties();  
  42.         props.put("bootstrap.servers", Constants.BOOTSTRAP_SERVERS);//服务器ip:端口号,集群用逗号分隔  
  43.         props.put("acks""all");  
  44.         props.put("retries"0);  
  45.         props.put("batch.size"16384);  
  46.         props.put("linger.ms"1);  
  47.         props.put("buffer.memory"33554432);  
  48.         props.put("key.serializer""org.apache.kafka.common.serialization.StringSerializer");  
  49.         props.put("value.serializer""org.apache.kafka.common.serialization.StringSerializer");  
  50.         producer = new KafkaProducer<>(props);  
  51.     }  
  52.   
  53.     /** 
  54.      * 消费者 
  55.      */  
  56.     static {  
  57.         Properties props = new Properties();  
  58.         props.put("bootstrap.servers", Constants.BOOTSTRAP_SERVERS);//服务器ip:端口号,集群用逗号分隔  
  59.         props.put("group.id""test");  
  60.         props.put("enable.auto.commit""true");  
  61.         props.put("auto.commit.interval.ms""1000");  
  62.         props.put("session.timeout.ms""30000");  
  63.         props.put("key.deserializer""org.apache.kafka.common.serialization.StringDeserializer");  
  64.         props.put("value.deserializer""org.apache.kafka.common.serialization.StringDeserializer");  
  65.         consumer = new KafkaConsumer<>(props);  
  66.         consumer.subscribe(Arrays.asList(Constants.TOPIC_NAME));  
  67.     }  
  68.   
  69.     /** 
  70.      * 发送对象消息 至kafka上,调用json转化为json字符串,应为kafka存储的是String。 
  71.      * @param msg 
  72.      */  
  73.     public static void sendMsgToKafka(IpranAlarm msg) {  
  74.         producer.send(new ProducerRecord<String, String>(Constants.TOPIC_NAME, String.valueOf(new Date().getTime()),  
  75.                 JSON.toJSONString(msg)));  
  76.     }  
  77.   
  78.       
  79.     /** 
  80.      * 从kafka上接收对象消息,将json字符串转化为对象,便于获取消息的时候可以使用get方法获取。 
  81.      */  
  82.     public static void getMsgFromKafka(){  
  83.         while(true){  
  84.             ConsumerRecords<String, String> records = KafkaUtils.getKafkaConsumer().poll(100);  
  85.             if (records.count() > 0) {  
  86.                 for (ConsumerRecord<String, String> record : records) {  
  87.                     JSONObject jsonAlarmMsg = JSON.parseObject(record.value());  
  88.                     IpranAlarm alarmMsg = JSONObject.toJavaObject(jsonAlarmMsg, IpranAlarm.class);  
  89.                     LOGGER.info("从kafka接收到的消息是:" + alarmMsg.toString());  
  90.                 }  
  91.             }  
  92.         }  
  93.     }  
  94.       
  95.     public static Consumer<String, String> getKafkaConsumer() {  
  96.         return consumer;  
  97.     }  
  98.   
  99.     public static void closeKafkaProducer() {  
  100.         producer.close();  
  101.     }  
  102.   
  103.     public static void closeKafkaConsumer() {  
  104.         consumer.close();  
  105.     }  
  106. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值