All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fun.fengwk.convention4j.springboot.starter.rocketmq.RocketMQAutoConfiguration Maven / Gradle / Ivy

There is a newer version: 1.1.17
Show newest version
package fun.fengwk.convention4j.springboot.starter.rocketmq;

import fun.fengwk.convention4j.common.rocketmq.AbstractRocketMQConsumerManager;
import fun.fengwk.convention4j.common.rocketmq.ProducerBuilder;
import fun.fengwk.convention4j.common.rocketmq.PushConsumerRocketMQConsumerManager;
import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.consumer.PushConsumer;
import org.apache.rocketmq.client.apis.producer.Producer;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

/**
 * @author fengwk
 */
@ConditionalOnClass({ Producer.class, PushConsumer.class })
@EnableConfigurationProperties(RocketMQProperties.class)
@AutoConfiguration
public class RocketMQAutoConfiguration {

    @ConditionalOnProperty(prefix = "convention.rocketmq", name = "endpoints")
    @ConditionalOnMissingBean
    @Bean
    public ClientConfiguration rocketMQClientConfiguration(RocketMQProperties rocketMQProperties) {
        return ClientConfiguration.newBuilder()
            .setEndpoints(rocketMQProperties.getEndpoints())
            .build();
    }

    @ConditionalOnBean(ClientConfiguration.class)
    @ConditionalOnMissingBean
    @Bean(destroyMethod = "close")
    public Producer rocketMQProducer(RocketMQProperties rocketMQProperties,
                                     ClientConfiguration rocketMQClientConfiguration) throws ClientException {
        ProducerBuilder pb = new ProducerBuilder();
        RocketMQProperties.ProducerConfig producerConfig = rocketMQProperties.getProducer();
        if (producerConfig != null) {
            if (producerConfig.getMaxAttempts() != null) {
                pb.setMaxAttempts(producerConfig.getMaxAttempts());
            }
        }
        Producer producer = pb.build(rocketMQClientConfiguration);
        return new TracerProducer(producer);
    }

    @ConditionalOnBean(ClientConfiguration.class)
    @ConditionalOnMissingBean
    @Bean(destroyMethod = "close")
    public AbstractRocketMQConsumerManager rocketMQConsumerManager(RocketMQProperties rocketMQProperties,
                                                                   ClientConfiguration rocketMQClientConfiguration) {
        return new PushConsumerRocketMQConsumerManager(
            rocketMQClientConfiguration, new ConfigurablePushConsumerBuilderProcessor(rocketMQProperties));
    }

    @ConditionalOnBean(AbstractRocketMQConsumerManager.class)
    @ConditionalOnMissingBean
    @Bean
    public RocketMQMessageListenerBeanPostProcessor rocketMQMessageListenerBeanPostProcessor(
        AbstractRocketMQConsumerManager rocketMQConsumerManager) {
        return new RocketMQMessageListenerBeanPostProcessor(rocketMQConsumerManager);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy