
com.github.ddth.queue.impl.BaseUniversalKafkaQueue Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ddth-queue-core Show documentation
Show all versions of ddth-queue-core Show documentation
DDTH's Libary to interact with various queue implementations
package com.github.ddth.queue.impl;
import com.github.ddth.kafka.KafkaMessage;
import com.github.ddth.queue.IQueueMessage;
import com.github.ddth.queue.utils.QueueException;
/**
* Base class for universal Kafka queue implementations.
*
* @author Thanh Nguyen
*
* @param
* @since 0.3.3
*/
public abstract class BaseUniversalKafkaQueue extends
KafkaQueue {
/**
* Puts a message to Kafka queue, partitioning message by
* {@link BaseUniversalQueueMessage#partitionKey()} (or
* {@link IQueueMessage#qId()} if message is not of type
* {@link BaseUniversalQueueMessage)}).
*
* @param msg
* @return
* @since 0.3.3.2
*/
@Override
protected boolean putToQueue(IQueueMessage msg) {
byte[] msgData = serialize(msg);
Object qId = msg.qId();
String kafkaKey = msg instanceof BaseUniversalQueueMessage ? ((BaseUniversalQueueMessage) msg)
.partitionKey() : null;
kafkaKey = kafkaKey != null ? kafkaKey : (qId != null ? qId.toString() : null);
KafkaMessage kmsg = kafkaKey != null ? new KafkaMessage(getTopicName(), kafkaKey, msgData)
: new KafkaMessage(getTopicName(), msgData);
getKafkaClient().sendMessage(getProducerType(), kmsg);
return true;
}
/**
* {@inheritDoc}
*/
@Override
protected byte[] serialize(IQueueMessage _msg) throws QueueException {
if (_msg == null) {
return null;
}
if (!(_msg instanceof BaseUniversalQueueMessage)) {
throw new IllegalArgumentException("This method requires an argument of type ["
+ BaseUniversalQueueMessage.class.getName() + "]!");
}
BaseUniversalQueueMessage msg = (BaseUniversalQueueMessage) _msg;
try {
return msg.toBytes();
} catch (Exception e) {
throw new QueueException.CannotSerializeQueueMessage(e);
}
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public T take() {
return (T) super.take();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy