服务熔断降级组建sentinel 整合apollo

服务端整合 apollo

 

第一步,我们先从官方git库把源码给拉下来,然后根据官方文档来进行改造
https://github.com/alibaba/Sentinel/wiki/Sentinel-控制台(集群流控管理)#规则配置

在dashboard的pom文件中引入apollo包的依赖
<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-openapi</artifactId>
    <version>1.2.0</version>
    <!--<scope>test</scope>-->
</dependency>

第二步,我们在java包下面的com.alibaba.csp.sentinel.dashboard.rule创建一个apollo包,然后把test目录下的

com.alibaba.csp.sentinel.dashboard.rule.apollo包里的4个类ApolloConfig,FlowRuleApolloProvider,FlowRuleApolloPublisher,ApolloConfigUtil拷贝到apollo包里。

1.ApolloConfig类修改
ApolloOpenApiClient client = ApolloOpenApiClient.newBuilder()
    .withPortalUrl("http://120.55.242.14:8070")
    .withToken("2f932aeca19b1300a7665b19e926c528b10160e3")
    .build();

其中http://120.55.242.14:8070 是你的apollo的portal服务地址

2f932aeca19b1300a7665b19e926c528b10160e3 是你登录portal后,系统里的开放平台授权管理的token值

 

2、FlowRuleApolloProvider类修改

String appId = "100079";
String flowDataId = ApolloConfigUtil.getFlowDataId(appName);
OpenNamespaceDTO openNamespaceDTO = apolloOpenApiClient.getNamespace(appId, "PRO", "default", "TEST2.cc");
String rules = openNamespaceDTO
        .getItems()
        .stream()
        .filter(p -> p.getKey().equals(flowDataId))
        .map(OpenItemDTO::getValue)
        .findFirst()
        .orElse("");

其中100079新建了一个appid,PRO是正式环境,TEST2.cc是key值。 后续dashboard改的参数,会push到appid=100079,apollo的pro环境的,TEST2.cc 为key下。

3、FlowRuleApolloPublisher类修改

AssertUtil.notEmpty(app, "app name cannot be empty");
if (rules == null) {
    return;
}
// Increase the configuration
String appId = "100079";
String flowDataId = ApolloConfigUtil.getFlowDataId(app);
//String flowDataId =  "sentinel-rules";
OpenItemDTO openItemDTO = new OpenItemDTO();
openItemDTO.setKey(flowDataId);
openItemDTO.setValue(converter.convert(rules));
openItemDTO.setComment("Program auto-join");
openItemDTO.setDataChangeCreatedBy("apollo");

apolloOpenApiClient.createOrUpdateItem(appId, "PRO", "default", "TEST2.cc", openItemDTO);

// Release configuration
NamespaceReleaseDTO namespaceReleaseDTO = new NamespaceReleaseDTO();
namespaceReleaseDTO.setEmergencyPublish(true);
namespaceReleaseDTO.setReleaseComment("Modify or add configurations");
namespaceReleaseDTO.setReleasedBy("apollo");
namespaceReleaseDTO.setReleaseTitle("Modify or add configurations");
apolloOpenApiClient.publishNamespace(appId, "PRO", "default", "TEST2.cc", namespaceReleaseDTO);
类似的apollo的应用id,环境,key

 

第四步,修改resources/app/scripts/directives/sidebar/sidebar.html文件

<li ui-sref-active="active">
    <a ui-sref="dashboard.flowV1({app: entry.app})">
        <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则
    </a>
</li>

修改为

<li ui-sref-active="active">
    <a ui-sref="dashboard.flow({app: entry.app})">
        <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则
    </a>
</li>

第五步,修改com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2,将刚才我们修改的provide和publisher注入

@Autowired
@Qualifier("flowRuleApolloProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleApolloPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

到此完工了。

以上只是对于flow这种类型的规则进行了修改,其他类型的规则也需要对接apollo的话,也需要进行如上述扩展。


客户端整合 apollo

1. pom.xml增加依赖

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-alibaba-sentinel</artifactId>
      <version>0.9.0.RELEASE</version>
   </dependency>
       <dependency>
           <groupId>com.alibaba.csp</groupId>
           <artifactId>sentinel-datasource-apollo</artifactId>
           <version>1.6.3</version>
       </dependency>
       <dependency>
           <groupId>com.alibaba.csp</groupId>
           <artifactId>sentinel-annotation-aspectj</artifactId>
           <version>1.6.3</version>
       </dependency>

   <dependency>
      <groupId>com.alibaba.csp</groupId>
      <artifactId>sentinel-cluster-server-default</artifactId>
      <version>1.6.0</version>
   </dependency>
   <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.61</version>
   </dependency>

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>4.0.0</version>
</dependency>
<dependency>
   <groupId>com.alibaba.csp</groupId>
   <artifactId>sentinel-core</artifactId>
   <version>1.6.3</version>
</dependency>
<dependency>
   <groupId>com.alibaba.csp</groupId>
   <artifactId>sentinel-transport-simple-http</artifactId>
   <version>1.6.0</version>
</dependency>
<dependency>
   <groupId>com.alibaba.csp</groupId>
   <artifactId>sentinel-parameter-flow-control</artifactId>
   <version>1.6.0</version>
</dependency>
<dependency>
   <groupId>com.alibaba.csp</groupId>
   <artifactId>sentinel-cluster-client-default</artifactId>
   <version>1.6.0</version>
</dependency>

 

2、application.yml

project:
  name: demoTestF2apollo
spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080


app:
  id: 100079
apollo:
  meta: http://120.55.242.14:8080


server:
  port: 8072

其中http://120.55.242.14:8080为apollo的正式环境的meta地址,上述服务端的时候,绑定了正式环境。

3、新建3个类,这块可以百度下,改成自己的配置即可。

AopConfiguration,
ApolloConfiguration,
ApolloConstants  Apollo中规则的Key

在资源中使用注解

@SentinelResource即可。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值