All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.edgar615.util.eventbus.KafkaEventProducer Maven / Gradle / Ivy

The newest version!
package com.github.edgar615.util.eventbus;

import com.github.edgar615.util.event.Event;
import com.github.edgar615.util.log.Log;
import com.github.edgar615.util.log.LogType;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.CompletableFuture;

/**
 * Created by Edgar on 2017/4/19.
 *
 * @author Edgar  Date 2017/4/19
 */
public class KafkaEventProducer extends EventProducerImpl {
  private static final Logger LOGGER = LoggerFactory.getLogger(KafkaEventProducer.class);

  private Producer producer;

  public KafkaEventProducer(KafkaProducerOptions options) {
    this(options, null);
  }

  public KafkaEventProducer(KafkaProducerOptions options, ProducerStorage producerStorage) {
    super(options, producerStorage);
    producer = new KafkaProducer<>(options.toProps());
  }

  @Override
  public EventFuture sendEvent(Event event) {
    EventFuture future = EventFuture.future(event);
    ProducerRecord record =
            new ProducerRecord<>(event.head().to(), event);
    producer.send(record, (metadata, exception) -> {
      if (exception == null) {
        Log.create(LOGGER)
                .setLogType(LogType.MS)
                .setEvent("kafka")
                .setTraceId(event.head().id())
                .setMessage("[{},{},{}] [{}] [{}] [{}]")
                .addArg(metadata.topic())
                .addArg(metadata.partition())
                .addArg(metadata.offset())
                .addArg(event.head().action())
                .addArg(Helper.toHeadString(event))
                .addArg(Helper.toActionString(event))
                .info();
        future.complete();
      } else {
        Log.create(LOGGER)
                .setLogType(LogType.MS)
                .setEvent("kafka")
                .setTraceId(event.head().id())
                .setMessage("[{}] [{}] [{}]")
//                .addArg(metadata.topic())
//                .addArg(metadata.partition())
//                .addArg(metadata.offset())
                .addArg(event.head().action())
                .addArg(Helper.toHeadString(event))
                .addArg(Helper.toActionString(event))
                .setThrowable(exception)
                .error();
        future.fail(exception);
      }
    });
    return future;
  }

  @Override
  public void close() {
    super.close();
    producer.close();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy