java kafka消息的发送与接收

java kafka消息的发送与接收
               消息队列在java EE级开发是很常用到的工具之一,在众多消息队列当中,active mq与kafka相对比较受开发者的喜爱,那么kafka是怎样实现消息的发送与接收呢?这里我们的消息通过一个实体类对象来进行封装,前提是你服务器上已经搭建好kafka环境,整个代码如下:
       1、kafka工具类,实现了生产者消费者消息的封装,以及发送消息到kafka上和从kafka上获取消息。

      
      
  1. package com.starit.ipran.kafka;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Properties;
  9. import org.apache.kafka.clients.consumer.Consumer;
  10. import org.apache.kafka.clients.consumer.ConsumerRecord;
  11. import org.apache.kafka.clients.consumer.ConsumerRecords;
  12. import org.apache.kafka.clients.consumer.KafkaConsumer;
  13. import org.apache.kafka.clients.producer.KafkaProducer;
  14. import org.apache.kafka.clients.producer.Producer;
  15. import org.apache.kafka.clients.producer.ProducerRecord;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import com.alibaba.fastjson.JSON;
  19. import com.alibaba.fastjson.JSONObject;
  20. import com.starit.ipran.load.Constants;
  21. import com.starit.ipran.model.IpranAlarm;
  22. public class KafkaUtils {
  23.     
  24.      private final static Logger LOGGER = LoggerFactory.getLogger(KafkaUtils.class);
  25.     
  26.      private static Producer<String, String> producer;
  27.      private static Consumer<String, String> consumer;
  28.      private KafkaUtils() {
  29.     }
  30.      /**
  31.      * 生产者,注意kafka生产者不能够从代码上生成主题,只有在服务器上用命令生成
  32.      */
  33.      static {
  34.         Properties props = new Properties();
  35.         props.put( “bootstrap.servers”, Constants.BOOTSTRAP_SERVERS); //服务器ip:端口号,集群用逗号分隔
  36.         props.put( “acks”, “all”);
  37.         props.put( “retries”, 0);
  38.         props.put( “batch.size”, 16384);
  39.         props.put( “linger.ms”, 1);
  40.         props.put( “buffer.memory”, 33554432);
  41.         props.put( “key.serializer”, “org.apache.kafka.common.serialization.StringSerializer”);
  42.         props.put( “value.serializer”, “org.apache.kafka.common.serialization.StringSerializer”);
  43.         producer = new KafkaProducer<>(props);
  44.     }
  45.      /**
  46.      * 消费者
  47.      */
  48.      static {
  49.         Properties props = new Properties();
  50.         props.put( “bootstrap.servers”, Constants.BOOTSTRAP_SERVERS); //服务器ip:端口号,集群用逗号分隔
  51.         props.put( “group.id”, “test”);
  52.         props.put( “enable.auto.commit”, “true”);
  53.         props.put( “auto.commit.interval.ms”, “1000”);
  54.         props.put( “session.timeout.ms”, “30000”);
  55.         props.put( “key.deserializer”, “org.apache.kafka.common.serialization.StringDeserializer”);
  56.         props.put( “value.deserializer”, “org.apache.kafka.common.serialization.StringDeserializer”);
  57.         consumer = new KafkaConsumer<>(props);
  58.         consumer.subscribe(Arrays.asList(Constants.TOPIC_NAME));
  59.     }
  60.      /**
  61.      * 发送对象消息 至kafka上,调用json转化为json字符串,应为kafka存储的是String。
  62.      * @param msg
  63.      */
  64.      public static void sendMsgToKafka(IpranAlarm msg) {
  65.         producer.send( new ProducerRecord<String, String>(Constants.TOPIC_NAME, String.valueOf( new Date().getTime()),
  66.                 JSON.toJSONString(msg)));
  67.     }
  68.     
  69.      /**
  70.      * 从kafka上接收对象消息,将json字符串转化为对象,便于获取消息的时候可以使用get方法获取。
  71.      */
  72.      public static void getMsgFromKafka(){
  73.          while( true){
  74.             ConsumerRecords<String, String> records = KafkaUtils.getKafkaConsumer().poll( 100);
  75.              if (records.count() > 0) {
  76.                  for (ConsumerRecord<String, String> record : records) {
  77.                     JSONObject jsonAlarmMsg = JSON.parseObject(record.value());
  78.                     IpranAlarm alarmMsg = JSONObject.toJavaObject(jsonAlarmMsg, IpranAlarm.class);
  79.                     LOGGER.info( “从kafka接收到的消息是:” + alarmMsg.toString());
  80.                 }
  81.             }
  82.         }
  83.     }
  84.     
  85.      public static Consumer<String, String> getKafkaConsumer() {
  86.          return consumer;
  87.     }
  88.      public static void closeKafkaProducer() {
  89.         producer.close();
  90.     }
  91.      public static void closeKafkaConsumer() {
  92.         consumer.close();
  93.     }
  94. }

       2、实体类是IpranAlarm,可以用其对象封装消息,调用发送与接收方法就可以实现相应的功能了。
        </div>
            </div>
java kafka消息的发送与接收
               消息队列在java EE级开发是很常用到的工具之一,在众多消息队列当中,active mq与kafka相对比较受开发者的喜爱,那么kafka是怎样实现消息的发送与接收呢?这里我们的消息通过一个实体类对象来进行封装,前提是你服务器上已经搭建好kafka环境,整个代码如下:
       1、kafka工具类,实现了生产者消费者消息的封装,以及发送消息到kafka上和从kafka上获取消息。

    
    
  1. package com.starit.ipran.kafka;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Properties;
  9. import org.apache.kafka.clients.consumer.Consumer;
  10. import org.apache.kafka.clients.consumer.ConsumerRecord;
  11. import org.apache.kafka.clients.consumer.ConsumerRecords;
  12. import org.apache.kafka.clients.consumer.KafkaConsumer;
  13. import org.apache.kafka.clients.producer.KafkaProducer;
  14. import org.apache.kafka.clients.producer.Producer;
  15. import org.apache.kafka.clients.producer.ProducerRecord;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import com.alibaba.fastjson.JSON;
  19. import com.alibaba.fastjson.JSONObject;
  20. import com.starit.ipran.load.Constants;
  21. import com.starit.ipran.model.IpranAlarm;
  22. public class KafkaUtils {
  23.     
  24.      private final static Logger LOGGER = LoggerFactory.getLogger(KafkaUtils.class);
  25.     
  26.      private static Producer<String, String> producer;
  27.      private static Consumer<String, String> consumer;
  28.      private KafkaUtils() {
  29.     }
  30.      /**
  31.      * 生产者,注意kafka生产者不能够从代码上生成主题,只有在服务器上用命令生成
  32.      */
  33.      static {
  34.         Properties props = new Properties();
  35.         props.put( “bootstrap.servers”, Constants.BOOTSTRAP_SERVERS); //服务器ip:端口号,集群用逗号分隔
  36.         props.put( “acks”, “all”);
  37.         props.put( “retries”, 0);
  38.         props.put( “batch.size”, 16384);
  39.         props.put( “linger.ms”, 1);
  40.         props.put( “buffer.memory”, 33554432);
  41.         props.put( “key.serializer”, “org.apache.kafka.common.serialization.StringSerializer”);
  42.         props.put( “value.serializer”, “org.apache.kafka.common.serialization.StringSerializer”);
  43.         producer = new KafkaProducer<>(props);
  44.     }
  45.      /**
  46.      * 消费者
  47.      */
  48.      static {
  49.         Properties props = new Properties();
  50.         props.put( “bootstrap.servers”, Constants.BOOTSTRAP_SERVERS); //服务器ip:端口号,集群用逗号分隔
  51.         props.put( “group.id”, “test”);
  52.         props.put( “enable.auto.commit”, “true”);
  53.         props.put( “auto.commit.interval.ms”, “1000”);
  54.         props.put( “session.timeout.ms”, “30000”);
  55.         props.put( “key.deserializer”, “org.apache.kafka.common.serialization.StringDeserializer”);
  56.         props.put( “value.deserializer”, “org.apache.kafka.common.serialization.StringDeserializer”);
  57.         consumer = new KafkaConsumer<>(props);
  58.         consumer.subscribe(Arrays.asList(Constants.TOPIC_NAME));
  59.     }
  60.      /**
  61.      * 发送对象消息 至kafka上,调用json转化为json字符串,应为kafka存储的是String。
  62.      * @param msg
  63.      */
  64.      public static void sendMsgToKafka(IpranAlarm msg) {
  65.         producer.send( new ProducerRecord<String, String>(Constants.TOPIC_NAME, String.valueOf( new Date().getTime()),
  66.                 JSON.toJSONString(msg)));
  67.     }
  68.     
  69.      /**
  70.      * 从kafka上接收对象消息,将json字符串转化为对象,便于获取消息的时候可以使用get方法获取。
  71.      */
  72.      public static void getMsgFromKafka(){
  73.          while( true){
  74.             ConsumerRecords<String, String> records = KafkaUtils.getKafkaConsumer().poll( 100);
  75.              if (records.count() > 0) {
  76.                  for (ConsumerRecord<String, String> record : records) {
  77.                     JSONObject jsonAlarmMsg = JSON.parseObject(record.value());
  78.                     IpranAlarm alarmMsg = JSONObject.toJavaObject(jsonAlarmMsg, IpranAlarm.class);
  79.                     LOGGER.info( “从kafka接收到的消息是:” + alarmMsg.toString());
  80.                 }
  81.             }
  82.         }
  83.     }
  84.     
  85.      public static Consumer<String, String> getKafkaConsumer() {
  86.          return consumer;
  87.     }
  88.      public static void closeKafkaProducer() {
  89.         producer.close();
  90.     }
  91.      public static void closeKafkaConsumer() {
  92.         consumer.close();
  93.     }
  94. }

       2、实体类是IpranAlarm,可以用其对象封装消息,调用发送与接收方法就可以实现相应的功能了。
        </div>
            </div>

猜你喜欢

转载自blog.csdn.net/s297485987/article/details/80870581