时间: 2020-08-23|tag: 62次围观|0 条评论

前言

我不知道你有没有看上一篇sentinel-apollo拉模式,相信看过的同学对于那么复杂结构的数据很头疼,起码我们运维小哥明确表态了不会用的,那么有没有通过在sentinel-dashboard直接修改然后同步到apollo上呢,也就是推模式.我也是经过了一番痛苦折腾后才知道有.改起来也不是很复杂.

相关文章

参考文档

sentinel-dashboard 修改步骤

修改好的代码地址: https://github.com/zhaoyunxing92/sentinel-dashboard-apollo
如果你对需改代码不感兴趣可以直接跳过到整合部分,这个代码你需要编译一份可以运行就可以了

如果你看过sentinel的源码就会发现其实人家已经实现了一小部分推模式的代码

前端

如果你很熟悉mvc并且做过mvc模式的开发那么看前端angular代码我敢保证你仅仅需要半个小时就能掌握它甚至更少时间

app.js文件 resources/app/scripts/app.js

这个文件默认就是angular的入口文件,就如vue使用main.js ,路由都在app.js里面

.state('dashboard.flow', {            templateUrl: 'app/views/flow_v2.html',            url: '/v2/flow/:app', // 这对应的地址栏的url            controller: 'FlowControllerV2', // 这个说明用的那个控制器,你只需要找到对应的文件就可以            resolve: {                loadMyFiles: ['$ocLazyLoad', function ($ocLazyLoad) {                    return $ocLazyLoad.load({                        name: 'sentinelDashboardApp',                        files: [                            'app/scripts/controllers/flow_v2.js'  // 打开这个文件                        ]                    });                }]            }        })

flow_v2.js resources/app/scripts/controllers/flow_v2.js

这个时候发现注入了一个 FlowServiceV2服务,可以打开FlowServiceV2服务的文件了

app.controller('FlowControllerV2', ['$scope', '$stateParams', 'FlowServiceV2', 'ngDialog',  'MachineService',  function ($scope, $stateParams, FlowService, ngDialog,    MachineService) {    $scope.app = $stateParams.app;    $scope.rulesPageConfig = {      pageSize: 10,      currentPageIndex: 1,      totalPage: 1,      totalCount: 0,    };

FlowServiceV2 resources/app/scripts/services/flow_service_v2.js

打开后你会发现里面都是跟后端通信的逻辑是不是很简单.app.js > controller > service 三步骤

app.service('FlowServiceV2', ['$http', function ($http) {    this.queryMachineRules = function (app, ip, port) {        var param = {            app: app,            ip: ip,            port: port        };        return $http({            url: '/v2/flow/rules',            params: param,            method: 'GET'        });    };

后端

后端部分由于我修改的太多不可能都写出来,我就总结下我在修改的时候遇到的问题吧

数据push到了apollo,sentinel-dashboard界面也能看到数据,但是配置的规则就是不生效

这个问题是由于我们给apollo注入了不必要的属性,可以参考issues

伪代码 @JSONField(serialize = false)后数据就不会到apollo了

public class FlowRuleEntity implements RuleEntity {    @JSONField(serialize = false)    private Long id;    @JSONField(serialize = false)    private String app;    @JSONField(serialize = false)    private String ip;    @JSONField(serialize = false)    private Integer port;}

整合流程

pom.xml 如果看过拉模式可以跳过

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

application.yml

注意里面的key不用随意修改,除非你很清楚你在干什么

spring:  application:    name: spring-boot-sentinel-apollo  cloud:    sentinel:      transport:        port: 8719 # 向sentinel-dashboard传输数据的端口 默认:8719        dashboard: localhost:8100 # sentinel-dashboard      log:        dir: ./logs # 默认值${home}/logs/csp/        switch-pid: true # 日志带上线程id      datasource:        flow: # 流控规则          apollo:            namespaceName: application            flowRulesKey: sentinel.flowRules            rule-type: flow #flow,degrade,authority,system, param-flow        degrade: # 熔断降级规则          apollo:            namespaceName: application            flowRulesKey: sentinel.degradeRules            rule-type: degrade        authority: # 授权规则  未验证,官方不推荐          apollo:            namespaceName: application            flowRulesKey: sentinel.authorityRules            rule-type: authority        system: # 系统规则          apollo:            namespaceName: application            flowRulesKey: sentinel.systemRules            rule-type: system        param-flow: # 热点规则          apollo:            namespaceName: application            flowRulesKey: sentinel.paramFlowRules            rule-type: param-flowapp:  id: ${spring.application.name}apollo:  meta: http://127.0.0.1:8080  cacheDir: ./apolloconfig  # 缓存文件位置

java

@SpringBootApplication@EnableApolloConfig // 开启apollopublic class SpringSentinelApolloServer {    public static void main(String[] args) {        SpringApplication.run(SpringSentinelApolloServer.class, args);    }}

jvm参数配置

-Denv=DEV

apollo申请token

sentinel-apollo-推模式插图
apollo-token

sentinel-dashboard 设置token

java -jar sentinel-dashboard.jar --apollo.portal.token= apollo申请的token

测试接口

http://localhost:7853/sentinel/hello

apollo效果图

sentinel-apollo-推模式插图1
sentinel-dashboard-push

最后

如果你想了解更多的文章可以微信搜索zhaoyx92,或者扫码关注,7*24的技术支持

sentinel-apollo-推模式插图2
zhaoyx92

文章同步

文章转载于:https://www.jianshu.com/p/7a720ffe5653

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《sentinel-apollo-推模式
   

还没有人抢沙发呢~