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