-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何遵循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
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计全链路智能编排高级蓝绿灰度发布界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发