package eu.europeana.cloud.service.dls.kafka;
import com.github.ddth.kafka.IKafkaMessageListener;
import eu.europeana.cloud.service.mcs.messages.AbstractMessage;
import kafka.serializer.DefaultDecoder;
import org.apache.commons.lang.SerializationUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
*
* Kafka listener receive message from broker and pass them to
* {@link messageDispatcher#routeMessage}.
*/
@Component
public class KafkaMessageListener implements IKafkaMessageListener {
private static final Logger LOGGER = LoggerFactory
.getLogger(KafkaMessageListener.class);
@Autowired
private MessageDispatcher messageDispatcher;
final DefaultDecoder decoder = new DefaultDecoder(null);
/**
* {@inheritDoc}
*/
@Override
public void onMessage(String topic, int partition, long offset, byte[] key,
byte[] messageBytes) {
try {
AbstractMessage message = (AbstractMessage) SerializationUtils
.deserialize(decoder.fromBytes(messageBytes));
messageDispatcher.routeMessage(message);
} catch (Exception e) {
// when message is malformed
LOGGER.error("Message rejected! Cause:" + e + "\n" + e.getMessage());
if (messageBytes != null)
LOGGER.error("\nRejected message body:"
+ new String(messageBytes));
}
}
}