Spring Cloud Alibaba基础教程:Sentinel Dashboard同步Apollo存储规则

本文介绍了如何在Spring Cloud Alibaba项目中,结合Sentinel Dashboard和Apollo实现动态规则同步。通过创建相应的配置类和实现DynamicRuleProvider、DynamicRulePublisher接口,实现了从Apollo获取并推送Sentinel的限流规则。详细步骤包括配置转换器、ApolloOpenApiClient的使用,以及客户端代码示例的分享。
摘要由CSDN通过智能技术生成

public class ApolloConfig {

@Bean

public Converter<List, String> flowRuleEntityEncoder() {

return JSON::toJSONString;

}

@Bean

public Converter<String, List> flowRuleEntityDecoder() {

return s -> JSON.parseArray(s, FlowRuleEntity.class);

}

@Bean

public ApolloOpenApiClient apolloOpenApiClient() {

ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()

.withPortalUrl(“https://apollo.xxx.com”) // TODO 根据实际情况修改

.withToken(“open api token”) // TODO 根据实际情况修改

.build();

return client;

}

}

第五步:实现Apollo的配置拉取实现。

@Component(“flowRuleApolloProvider”)

public class FlowRuleApolloProvider implements DynamicRuleProvider<List> {

@Autowired

private ApolloOpenApiClient apolloOpenApiClient;

@Autowired

private Converter<String, List> converter;

@Value(“${env:DEV}”)

private String env;

@Override

public List getRules(String appName) throws Exception {

// flowDataId对应

String flowDataId = “sentinel.flowRules”;

OpenNamespaceDTO openNamespaceDTO = apolloOpenApiClient.getNamespace(appName, env, “default”, “application”);

String rules = openNamespaceDTO

.getItems()

.stream()

.filter(p -> p.getKey().equals(flowDataId))

.map(OpenItemDTO::getValue)

.findFirst()

.orElse(“”);

if (StringUtil.isEmpty(rules)) {

return new ArrayList<>();

}

return converter.convert(rules);

}

}

  • getR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值