kafka生产者

SFPayMonitorProducer是Spring组件,用于初始化和管理Kafka生产者。它从Redis获取配置信息,如主题名称、Kafka连接地址、集群名称和池大小,然后创建ProducerPool实例。提供了单条和批量发送JSON字符串到指定主题的方法。如果在发送过程中遇到异常,会记录错误日志并保存到异常日志管理系统。
摘要由CSDN通过智能技术生成
package com.sf.next.sfpay.core.kafka.producer;

import java.util.List;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.sf.kafka.api.produce.IKafkaProducer;
import com.sf.kafka.api.produce.ProduceConfig;
import com.sf.kafka.api.produce.ProducerPool;
import com.sf.next.sfpay.log.manager.ExpLogManager;
import com.sf.pay.cache.redis.RedisDbCfgUtil;
import com.sf.next.sfpay.message.code.ErrorMessage;

@Component
public class SFPayMonitorProducer {
@Autowired
private RedisDbCfgUtil redisDbCfgUtil;
@Autowired
private ExpLogManager expLogServiceImpl;
// 日志
private static final Logger logger = Logger.getLogger(SFPayMonitorProducer.class);

private IKafkaProducer kafkaProducer = null;
private String topicKafka; // 主题名称
private String poolSizeStr;
private String kafkaUrl; // KAFKA连接地址
private String clusterName;// 主题所在的集群名称
private String topicTokens;// 主题名称+分隔符 (固定不变)+主题的校验码

@PostConstruct
public void init() {
try {
topicKafka = redisDbCfgUtil.getSysCfgValueStr("MONITOR_topicKafka", "");
logger.debug("===============================topicKafka===============================");
logger.debug(topicKafka);
poolSizeStr = redisDbCfgUtil.getSysCfgValueStr("MONITOR_kafka_poolSizeStr", "");
logger.debug("===============================poolSizeStr===============================");
logger.debug(poolSizeStr);
kafkaUrl = redisDbCfgUtil.getSysCfgValueStr("MONITOR_kafkaUrl", "");
logger.debug("===============================kafkaUrl===============================");
logger.debug(kafkaUrl);
clusterName = redisDbCfgUtil.getSysCfgValueStr("MONITOR_clusterName", "");
logger.debug("===============================clusterName===============================");
logger.debug(clusterName);
topicTokens = redisDbCfgUtil.getSysCfgValueStr("MONITOR_kafka_topicTokens", "");
logger.debug("===============================topicTokens===============================");
logger.debug(topicTokens);


int poolSize = 10;
if (!"".equals(poolSizeStr) && poolSizeStr != null) {
poolSize = Integer.parseInt(poolSizeStr);
}
ProduceConfig produceConfig = new ProduceConfig(poolSize, kafkaUrl,
clusterName, topicTokens);
if (!StringUtils.isEmpty(kafkaUrl)) {
kafkaProducer = new ProducerPool(produceConfig);
}


} catch (Exception e) {
logger.error(ErrorMessage.MAIN_MESSAGE);
logger.error(ErrorMessage.SFPAY_KAFKA_INIT + e);
expLogServiceImpl.saveExpLog("2056", "2056", ErrorMessage.SFPAY_KAFKA_INIT + e, "");
}
}
public String kafkaProductMonitor(String jsonStr) {
// 写入kafka
try {
if (kafkaProducer != null){
kafkaProducer.sendString(topicKafka, jsonStr);
logger.info("写入kafka");

}


} catch (Exception e) {
logger.error(ErrorMessage.MAIN_MESSAGE);
logger.error(ErrorMessage.SFPAY_KAFKA_SEND + e);
expLogServiceImpl.saveExpLog("2054", "2054", ErrorMessage.SFPAY_KAFKA_SEND + e, "");
return "error2054";
}
return "OK";
}
/**
* 描述:批量调用kafka
* 2017年4月7日
* @param jsonList
* @return
* String
*/
public String batchkafkaProductMonitor(List<String> jsonList){
try {
if (kafkaProducer != null)
{
kafkaProducer.batchSendString(topicKafka, jsonList);
}
} catch (Exception e) {
logger.error(ErrorMessage.MAIN_MESSAGE);
logger.error(ErrorMessage.SFPAY_KAFKA_SENDALL + e);
expLogServiceImpl.saveExpLog("2055", "2055", ErrorMessage.SFPAY_KAFKA_SENDALL + e, "");
return "error2054";
}
return "OK";
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值