• 2020-05-15 rocketmq-spring-starter支持多集群


    rocketmq支持多个集群关键问题在于连接到不同的rocketmq实例
    DefaultMQProducer producer实例化会调用以下方法:

    org.apache.rocketmq.client.producer.DefaultMQProducer.start
    org.apache.rocketmq.client.impl.MQClientManager.getAndCreateMQClientInstance(org.apache.rocketmq.client.ClientConfig, org.apache.rocketmq.remoting.RPCHook)
    

    MQClientManager是单例使用的,内部维护了一个MQClientInstance的map,
    key的计算方法如下:

    public String buildMQClientId() {
            StringBuilder sb = new StringBuilder();
            sb.append(this.getClientIP());
            sb.append("@");
            sb.append(this.getInstanceName());
            if (!UtilAll.isBlank(this.unitName)) {
                sb.append("@");
                sb.append(this.unitName);
            }
    
            return sb.toString();
        }
    

    instanceName默认值为:

    private String instanceName = System.getProperty("rocketmq.client.name", "DEFAULT");
    

    想要连接到不同的MQClientInstance就需要配置不同的instanceName或者unitName

    先看官方的实现方法:
    rocketmq-spring-starter官方提供了注解 @ExtRocketMQTemplateConfiguration支持发送消息到多个rocketmq集群,相关的文章有:

    https://github.com/apache/rocketmq-spring/blob/master/README_zh_CN.md
    

    官方包的实现方式是将RocketMQTemplate bean的名字作为instanceName。
    consumer端似乎还缺少支持,扩展下这个注解@RocketMQMessageListener,增加instanceName参数,consumer端初始化时传入这个参数即可。

    使用的版本:

    rocketmq-client 4.5.2
    rocketmq-spring-starter 2.0.5-SNAPSHOT
  • 相关阅读:
    centos
    ssh 登录 centos 服务器
    Sql NoSql
    Java
    PHP
    React Hooks使用
    前端优化tips
    Error:Node Sass version 5.0.0 is incompatible with ^4.x 解决
    css换行
    git 关联多个远程仓库
  • 原文地址:https://www.cnblogs.com/imgax/p/12893882.html
Copyright © 2020-2023  润新知