Kafka-API中间件MQ消息队列在Maven项目中的配置使用操作 (分布式发布订阅消息系统)

版权声明: 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命名约定

Kafkatopic有着严格的命名约束,命名格式为: 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);
			}
		}
	}
    }
}


猜你喜欢

转载自blog.csdn.net/W_Leodong/article/details/79880277