58 lines
2.0 KiB
Markdown
58 lines
2.0 KiB
Markdown
# Sentinel DataSource Eureka
|
|
|
|
Sentinel DataSource Eureka provides integration with [Eureka](https://github.com/Netflix/eureka) so that Eureka
|
|
can be the dynamic rule data source of Sentinel.
|
|
|
|
To use Sentinel DataSource Eureka, you should add the following dependency:
|
|
|
|
```xml
|
|
<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:
|
|
|
|
```java
|
|
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", flowRuleParser);
|
|
FlowRuleManager.register2Property(eurekaDataSource.getProperty());
|
|
```
|
|
|
|
Example for Spring Cloud Application:
|
|
|
|
```java
|
|
@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](https://github.com/Netflix/eureka/wiki/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. |