pleasecheckhere2016 7e354016c7 Add Eureka data-source extension (#1502) | 4年前 | |
---|---|---|
.. | ||
src | 4年前 | |
README.md | 4年前 | |
pom.xml | 4年前 |
Sentinel DataSource Eureka provides integration with Eureka so that Eureka can be the dynamic rule data source of Sentinel.
To use Sentinel DataSource Eureka, you should add the following dependency:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-eureka</artifactId>
<version>x.y.z</version>
</dependency>
Then you can create an EurekaDataSource
and register to rule managers.
SDK usage:
EurekaDataSource<List<FlowRule>> eurekaDataSource = new EurekaDataSource("app-id", "instance-id",
Arrays.asList("http://localhost:8761/eureka", "http://localhost:8762/eureka", "http://localhost:8763/eureka"),
"rule-key", new Converter<String, List<FlowRule>>() {
@Override
public List<FlowRule> convert(String o) {
return JSON.parseObject(o, new TypeReference<List<FlowRule>>() {
});
}
});
FlowRuleManager.register2Property(eurekaDataSource.getProperty());
Example for Spring Cloud Application:
@Bean
public EurekaDataSource<List<FlowRule>> eurekaDataSource(EurekaInstanceConfig eurekaInstanceConfig, EurekaClientConfig eurekaClientConfig) {
List<String> serviceUrls = EndpointUtils.getServiceUrlsFromConfig(eurekaClientConfig,
eurekaInstanceConfig.getMetadataMap().get("zone"), eurekaClientConfig.shouldPreferSameZoneEureka());
EurekaDataSource<List<FlowRule>> eurekaDataSource = new EurekaDataSource(eurekaInstanceConfig.getAppname(),
eurekaInstanceConfig.getInstanceId(), serviceUrls, "flowrules", new Converter<String, List<FlowRule>>() {
@Override
public List<FlowRule> convert(String o) {
return JSON.parseObject(o, new TypeReference<List<FlowRule>>() {
});
}
});
FlowRuleManager.register2Property(eurekaDataSource.getProperty());
return eurekaDataSource;
}
To refresh the rule dynamically,you need to call Eureka-REST-operations to update instance metadata:
PUT /eureka/apps/{appID}/{instanceID}/metadata?{ruleKey}={json of the rules}
Note: don’t forget to encode your json string in the url.