Skip to content

如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发

HaojunRen edited this page May 31, 2024 · 2 revisions

目前Nepxion Discovery不支持象RocketMQ、RabbitMQ、Redis等数据存储型中间件的全链路流量管控。本文提供一定的思路,以供开发者把这些中间件绑定在Nepxion Discovery全链路流量管控的逻辑上,例如,RocketMQ、RabbitMQ、Redis可以和服务进行联合灰度蓝绿发布

中间件流量管控绑定服务元数据属性

支持实现中间件根据服务自身元数据属性来实施流量管控,例如,根据不同的版本差异化的选择消息队列的Queue,发生消息之前,先获取到服务版本,选择Queue。使用者也可以跟区域、环境、可用区等其它维度进行绑定

@Autowired
private PluginAdapter pluginAdapter;

String version = pluginAdapter.getVersion();

中间件流量管控绑定路由规则

支持实现中间件根据动态路由规则来实施流量管控,例如,根据不同的版本路由规则差异化的选择消息队列的Queue,发生消息之前,先获取到版本路由规则,选择Queue。使用者也可以跟区域、环境、可用区等其它维度进行绑定

@Autowired
private StrategyContextHolder strategyContextHolder;

String routeVersion = strategyContextHolder.getRouteVersion();

中间件流量管控自定义规则

支持实现中间件自定义规则,例如,把规则存在Nacos配置中心,实现订阅后通过Caffeine组件进行缓存。根据不同的业务参数(Header/Parameter/Cookie)驱动,选择Queue。使用者也可以使用Apollo、Consul、Etcd、Redis、Zookeeper作为管控规则的存储标的

public class RocketMQNacosProcessor extends NacosProcessor {
    @Autowired
    private PluginAdapter pluginAdapter;

    @Autowired
    private PluginCache pluginCache;

    @Override
    public String getGroup() {
        return pluginAdapter.getGroup();
    }

    @Override
    public String getDataId() {
        return pluginAdapter.getServiceId() + "-" + "rocketmq";
    }

    @Override
    public String getDescription() {
        return "RocketMQ Gray";
    }

    @Override
    public void callbackConfig(String config) {
        // 订阅到中间件流量管控规则,缓存到本地
        // 如果使用者对存储字符串格式的规则不满意,可以复制PluginCache.java,改造成规则对象缓存方式,参考RuleCache.java
        pluginCache.put("rocketmq", config);
    }
}

根据不同的业务参数(Header/Parameter/Cookie),去缓存的规则对象里,寻找匹配的Queue

@Autowired
private PluginCache pluginCache;

String config = pluginCache.get("rocketmq");

@Autowired
private StrategyContextHolder strategyContextHolder;

String user = strategyContextHolder.getHeader("user");
String user = strategyContextHolder.getParameter("user");
String user = strategyContextHolder.getCookie("user");

// 根据config和user解析出对应的RocketMQ的Queue的路由,发送消息




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally