/**
* 异步发送
*
* @param topic 主题
* @param key key
* @param value 消息内容
*
* @throws WebsocketException 入参不合法
*/
public void doProducer(KafkaProducerTopics topic,
String key,
String value) throws WebsocketException {
if (null == topic) {
throw new WebsocketException(WsErrorCode.ERROR_INVALID_PARAM);
}
ProducerRecord<String, String> record = new ProducerRecord<>(topic.getTopic(), key, value);
producer.send(record);
}
/**
* 同步阻塞发送
*
* @param topic 主题
* @param key key
* @param value 消息内容
* @param unit 时间单位
* @param timeout 超时时间
*
* @throws WebsocketException 执行超时、执行被中断、执行失败等会抛出此异常
*/
public void doProducer(KafkaProducerTopics topic,
String key,
String value,
TimeUnit unit,
long timeout) throws WebsocketException {
if (null == topic) {
throw new WebsocketException(WsErrorCode.ERROR_INVALID_PARAM);
}
try {
ProducerRecord<String, String> record = new ProducerRecord<>(topic.getTopic(),
key,
value);
Future<RecordMetadata> resultFuture = producer.send(record);
resultFuture.get(timeout, unit);
} catch (TimeoutException e) {
throw new WebsocketException(WsErrorCode.ERROR_TIME_OUT);
} catch (InterruptedException e) {
throw new WebsocketException(WsErrorCode.THREAD_INTERRUPTED);
} catch (ExecutionException e) {
throw new WebsocketException(WsErrorCode.ERROR_UNKNOW_EXCEPTION, e.getMessage());
}