sentinel-apollo-推模式

作者 : 开心源码 本文共3608个字,预计阅读时间需要10分钟 发布时间: 2022-05-12 共196人阅读

前言

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

相关文章

  • sentinel-apollo拉模式

参考文档

  • Sentinel Dashboard同步Apollo存储规则

sentinel-dashboard 修改步骤

修改好的代码地址: 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

apollo-token

sentinel-dashboard 设置token

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

测试接口

http://localhost:7853/sentinel/hello

apollo效果图

sentinel-dashboard-push

最后

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

zhaoyx92

文章同步

  • github
  • 简书
  • csdn
  • 个人博客

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » sentinel-apollo-推模式

发表回复