版权声明: https://blog.csdn.net/W_Leodong/article/details/79880277
一、
Maven依赖
<dependency>
<groupId>com.foriseland.fjf.mq</groupId>
<artifactId>fjf-mq-kafka</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
二、配置说明
Product
配置:
<-- 以下信息依赖配置中心 -->
<bean id="producerServer" class="com.foriseland.fjf.mq.producer.KafkaProducerGeneric" init-method="init"destroy-method="close">
<propertyname="properties">
<props>
<prop key="bootstrap.servers">192.168.2.5:9092,192.168.2.5:9093,192.168.2.5:9094</prop>
<propkey="acks">all</prop>
<propkey="retries">1</prop>
<propkey="batch.size">16384</prop>
<propkey="linger.ms">1</prop>
<propkey="buffer.memory">33554432</prop>
<propkey="serializer.class">kafka.serializer.StringEncoder</prop>
<propkey="key.serializer">org.apache.kafka.common.serialization.StringSerializer</prop>
<propkey="value.serializer">org.apache.kafka.common.serialization.StringSerializer</prop>
</props>
</property>
</bean>
Consumer
配置:
<bean id="consumerConfig" class="com.foriseland.fjf.mq.motion.KafkaConsumerManager" init-method="init">
<property name="properties">
<props>
<prop key="bootstrap.servers">192.168.2.5:9092</prop>
<prop key="group.id">1</prop>
<prop key="enable.auto.commit">true</prop>
<prop key="session.timeout.ms">30000</prop>
<prop key="auto.commit.interval.ms">1000</prop>
<prop key="key.deserializer">org.apache.kafka.common.serialization.StringDeserializer</prop>
<prop key="value.deserializer">org.apache.kafka.common.serialization.StringDeserializer</prop>
</props>
</property>
</bean>
三、topic命名约定
Kafka的
topic有着严格的命名约束,命名格式为:
Object-model-key
。
l 第一级为业务,第二级为模块,第三级为key。
l 信息连接符为 - ,禁止采用其它字符进行连接。
长度可大于三级,但是不能小于三级。
qumao-order-orderList这样的命名结果,所有业务系统必须严格按照此命名结构去做,约束至少要到三级,如qumao-order-orderid-ordertyle,也是可以通过的(大于三级不限制),如果是qumao-ordertype这种类型(小于三级长度),系统会报错,
KafkaTopic is not effective,key be similar to [object-model-key]
四、Product API例子
引入属性
@Autowired
private KafkaProducerGeneric producerServer;
publicFuture<RecordMetadata> sendMessage(String topic, String key, Stringvalue);
五、
Consumer API 例子
六、
Consumer注意事项
l Kafka或者rocketMq的消费端需要单独创建model,因为后期需要单独启动。
l 接口统一继承IKafkaConsumerServer接口。
l Model类型为java工程就可以,通过main函数启动。
l 启动main函数方式,main函数类为:
.public class StandardConsumerMqLauncher {
private static final Logger logger = LoggerFactory.getLogger(StandardConsumerMqLauncher.class);
@SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
logger.info("启动");
ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:spring/spring-*.xml");
ConsumerManagerPool bean = context.getBean(ConsumerManagerPool.class);
bean.start();
logger.info("启动完成");
synchronized (StandardConsumerMqLauncher.class) {
while (true) {
try {
StandardConsumerMqLauncher.class.wait();
} catch (InterruptedException e) {
logger.error("后台服务异常终止:" + e.getMessage(), e);
}
}
}
}
}