封装多套集群兼容的RocketMq-SDK(腾讯云RocetMq)一:背景以及准备工作

背景

        由于发现公司很多项目都用到了RocketMQ   但有些项目例如支付系统。涉及到了要对接多个集群。例如业务A 链接着自己的MQ集群A,业务系统B连接着MQ集群B。

        发生支付后,支付成功或失败的的消息,A业务到发送到集群A  ,B业务的发送到集群B。

而支付系统本身可能还需要监听着多套集群的消息。

自己封装SDK的契机

        由于本人在公司的基础架构组。所以这个事情自然的落在了我的头上。本人也不是什么高手,正常思维先上网查一波。但本人阅读能力有限。看了很多文章,要不其实解决不了我的需求,要不能解决但我读的云山雾罩。所以并不是本人装X,实在能力有限。开始了自己编写

目标

        由于公司是完全用的腾讯云(腾讯云也确实好使,比如自定义延迟队列这些,不用自己费脑子),所以目标之一,这个SDK要兼容腾讯云。既然是SDK 就还是采用了 rocket的原生jar包。而没有采用spring的。最好可以像Spring的SDK一样可以采用注解进行配置

最终目标就是实现 多集群兼容的消息SDK

准备工作

 不废话,大家都是专业人士,直接上代码加注

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.9.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-acl</artifactId>
            <version>4.9.4</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

     MQ配置类

/**
 * Rocket抽象
 * @author wangyuanquan
 * @data 2023/4/28 11:45
 */
@Data
public class RocketMqProperties {
    /**
     * namesev 地址 多个用逗号隔开
     */
    private String address;
    /**
     * 是否开启
     */
    private Boolean enable = false;
    /**
     * 扫描路径 用于注解
     */
    private Boolean scanAllPackage;
    /**
     * 生产者
     */
    private List<ProducerProperties> producers;

    /**
     * 消费者
     */
    private List<ConsumerProperties> consumers;

}

生产者配置类

/**
 * 生产者属性
 * @author wangyuanquan
 * @data 2023/4/28 09:50
 */
@Data
public class ProducerProperties {

    /**
     * 地址
     */
    private String address;
    /**
     * 生产组
     */
    private String group;
    /**
     * bean 名称
     */
    private String beanName;
    /**
     * 生成者秘钥
     */
    private String accessKey;
    /**
     * 生产者角色
     */
    private String secretKey;
    /**
     * 生产者组
     */
    private String namespace;

}

消费者配置类:

/**
 * @author wangyuanquan
 * @data 2023/4/28 17:32
 */
@Data
public class ConsumerProperties {
    /**
     * 地址
     */
    private String address;
    /**
     * 消费组
     */
    private String group;
    /**
     * 集群还是广播 1:集群 2:广播
     */
    private Integer model = 1;
    /**
     * 主题
     */
    private String topic;
    /**
     * tag
     */
    private String tag;
    /**
     * 消息监听器  全类名
     */
    private String listener;

    /**
     * 消费方式
     * last:消费者客户端从之前停止的地方开始。 如果是新启动的消费者客户端,根据消费者群体的老化情况,
     * 有两种情况:如果consumer group是最近创建的,最早订阅的消息还没有过期,说明consumer group代表最近上线的业务,
     * 从头开始消费;
     * <p>
     * first:消费者客户端将从最早可用的消息开始,也就是从头开始消费
     * <p>
     * timestamp:Consumer客户端将从指定的时间戳开始,这意味着在consumeTimestamp之前产生的消息将被忽略
     */
    private String consumeFromWhere;
    /**
     * 当consumeFromWhere=timestamp 时这个字段必填写
     * 格式:TODO
     */
    private String consumeTimestamp;
    /**
     * 最小消费线程数量
     */
    private Integer consumeThreadMin = 20;
    /**
     * 最大线程消费数量
     */
    private Integer consumeThreadMax = 20;
    /**
     * MQ消费者每次去拉取消息拉取多少条
     */
    private Integer pullBatchSize;
    /**
     * 生成者秘钥
     */
    private String accessKey;
    /**
     * 生产者角色
     */
    private String secretKey;
    /**
     * 生产者组
     */
    private String namespace;
}

SPI:  spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zettayotta.req.producer.config.RocketMqAutoConfig

SDK配置类

/**
 * @author wangyuanquan
 * @data 2023/5/13 09:50
 */
@Configuration
@Import(RocketMqDynamicRegistryConfig.class)
public class RocketMqAutoConfig {
}

至此准备工作完成。后面讲进入正式编写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值