rocketmq productor的封装和监控

1.driver-event-pd.xml

<?xml version="1.0" encoding="utf-8"?>

<config> 
  <value>{"name":"driver_event","namesrvAddr":"test-rq01-a.mq.01zhuanche.com:9876", "group":"driverEventGroup", "instanceName":"driverEventInstance", "retryTimesWhenSendFailed": 3, "sendMsgTimeout":3000}</value> 
</config>

2. TopicEnum

public enum TopicEnum implements ITopic {
    DRIVER_EVENT_TOPIC( "driver-event-pd", "RecodeTraceQueue"),
    ROB_NOTICE_TOPIC( "rob-notice-pd","robNotice"),
    ;
    private String configName ;
    private String topic;
    TopicEnum(String configName, String topic) {
        this. configName = configName;
        this. topic = topic;
    }
    @Override
    public String configKey() { return configName; }
    @Override
    public String topicName() { return topic; }
}

3.WarmupProcess

@Service
public class WarmupProcess implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if(event.getApplicationContext().getParent()!=null){
            return;
        }
        ApplicationContext context = event.getApplicationContext();

        for(MongoEnum mongo : MongoEnum.values()){
            mongo.get().warmup();
        }

        for(TopicEnum topic : TopicEnum.values()){
            topic.get().warmup();
        }
        for(DispatcherRedisEnum redis : DispatcherRedisEnum.values()){
            redis.get().warmup();
        }

        Map<String, HikariDatasourceWrap> datasources = context.getBeansOfType(HikariDatasourceWrap.class);
        if(CollectionUtils.isNotEmpty(datasources.values())){
            for (HikariDatasourceWrap datasourceWrap : datasources.values()) {
                datasourceWrap.warmup();
            }
        }
        JvmManager.start();
    }
}

 

4.ITopic

public interface ITopic {

    ConcurrentHashMap<ITopic, RocketMqProductorWrap> valueCache = new ConcurrentHashMap<>();

    String configKey();

    String topicName();

    default RocketMqProductorWrap get() {
        RocketMqProductorWrap productor = valueCache.computeIfAbsent(this, RocketMqProductorWrap::new);
        return productor;
    }

}

 

5.RocketMqProductorWrap

public class RocketMqProductorWrap implements RockectMqProductor {

    private Logger logger = LoggerFactory.getLogger(RocketMqProductorWrap.class);

    private static final AtomicInteger PRODUCT_SEQ = new AtomicInteger();

    private static final int DEFAULT_RETRY_TIMES_WHEN_SEND_FAILED = 3;

    private static final int DEFAULT_SEND_MSG_TIMEOUT = 2 * 1000;

    private final BaseNodeResource<DefaultMQProducer> producerNode;

    private final String configKey;

    private final String topic;

    private final Consumer<RocketMqProductorWrap> failCallback; //鍗犳椂娌℃湁鐢紝鍥炲ご鎵╁睍寮傛鏂规硶鏃朵娇鐢�

    public RocketMqProductorWrap(String configKey, String topic) {
        this(configKey, topic, null);
    }

    public RocketMqProductorWrap(ITopic itopic) {
        this(itopic.configKey(), itopic.topicName(), null);
    }

    public RocketMqProductorWrap(String configKey, String topic, Consumer<RocketMqProductorWrap> failCallback) {
        this.configKey = configKey;
        this.topic = topic;
        this.failCallback = failCallback;
        this.producerNode = BaseNodeResource.<DefaultMQProducer>newBuilder()
                .withKey(configKey)
                .withFactory(this::initProductor)
                .withCleanupConsumer(this::cleanup)
                .withWaitStopPeriod(1000) //鍏抽棴鑰佺殑productor鍓嶏紝鍏堢瓑1000ms锛岀瓑寰呮棫鏁版嵁鍙戦�佸畬鎴愩��
                .addFactoryFailedListener(this::factoryFailListenner)
                .build();
    }

    private DefaultMQProducer initProductor(String content) {
        try {
            RocketProductorConfig config = RocketProductorConfig.from(content);
            checkParam(config);
            DefaultMQProducer productor = new DefaultMQProducer();
            //澧炲姞搴忓垪鍙凤紝闃叉鐢变簬杩涚▼涓璯roupName鎴栬&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值