2 Star 5 Fork 3

_85024610 / spring-cloud-demo

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

spring-cloud-demo

service-luna

  • 业务代码:http://localhost:8763/hi?name=forezp
  • 功能:
    • 使用nacos作为服务注册中心和配置中心
    • 使用elasticsearch
    • 启动命令添加skywalking探针,java -javaagent:x:\xxx\skywalking-agent\skywalking-agent.jar -jar your_application.jar
    • druid监控,相关配置在com.demo.config.servlet,监控url:http://localhost:8763/druid/login.html 根据方法返回值将纯JSON格式字符串反序列化相应对象
    • Junit注解使用JunitAnnotaionTest.java
    • function目录下是介绍Java和第三方jar包的使用
      • 算法
        • Kafka 时间轮算法
        • 快速排序算法
      • 日志对接graylog
      • retrofit http客户端使用
      • Java线程相关测试
      • 使用shardingsphere实现分库规则 (搭建shardingsphere proxy服务,可以将分库聚合成一个库,通过工具方便查询)
        • 分片策略所在的路径 com.demo.function.shardingsphere.config
        • 强制分片AOP com.demo.function.shardingsphere.aop.ShardingStrageyAop
        • 强制分片注解 com.demo.function.shardingsphere.annotation.ShardingStrategy
  • 注意:使用延迟初始化,只需要启动以下服务:
    • nacos
    • elasticsearch

service-cache

  • 主要缓存功能模块功能介绍
  • 功能:
    • redis使用
      • 实现注解方式添加锁,底层使用redisson加锁和释放锁
      • redisson加锁
      • redisTemplate批量添加数据测试
    • SpringBoot Cache使用
      • 使用spring cache,缓存实现方案用到redis。并且增加注解实现失效时间,配置类:RedisConfig。自定义RedisCacheManager,
    • caffeine
      • caffeine的Cache,LoadingCache,AsyncCache使用

service-job

  • 主要调度任务模块功能介绍
  • 功能:
    • xxl-job
    • ElasticJob-lite

service-mq

  • 主要是mq功能模块功能介绍
  • 功能:
    • RocketMQ使用
      • 常规功能使用
      • 自定义时间延时队列,不受原来的18个延时Level限制
      • 使用RocketMQ订阅canal得到的数据库日志解析
      • 自定义注解@MqConsumer,该注解是方法级别使用。该注解具备@RocketMQMessageListener是一样功能,而且不用为每个主题定义一个类
    • Kafka使用
      • 实现延时消息

service-miya

  • 注意:使用延迟初始化启动服务,无法消费rocketmq的消息
  • 功能:
    • 新增rocketmq 消费端,包路径:com.demo.miya.mq.rocketmq。如果消费端没有接收消息,检查配置文件是否开启延迟初始化。

service-gateway

  • 使用springcloud gateway作为网管,实现统一路由方式
  • 功能:
    • 使用modify request body拦截器,实现解释token后,将uid赋值到body对象里
    • 接入阿里Sentinel实现网关流控,配合Sentinel-dashboard使用时,启动命令必须添加启动参数Dcsp.sentinel.app.type=1,这样才能sentinel dashboard显示网关api分组配置

nacos

startup.cmd -m standalone

graylog 日志系统

  • Graylog 是一个开源的日志聚合、分析、审计、展现和预警工具。在功能上来说,和 ELK 类似,但又比 ELK 要简单很多。依靠着更加简洁,高效,部署使用简单的优势很快受到许多人的青睐。当然,在扩展性上面确实没有比 ELK 好,但是其有商业版本可以选择

  • 容器部署:

    • 下载镜像:
      • docker pull mongo:4
      • docker pull elasticsearch:7.12.1
      • docker pull graylog/graylog:4.0
    • 启动容器:
      • docker run --name mongo -d mongo:4
      • docker run --name elasticsearch -e "http.host=0.0.0.0" -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e http.cors.allow-origin="*" -e http.cors.enabled=true -d -p 9200:9200 elasticsearch:7.12.1
      • docker run --name graylog --link mongo --link elasticsearch -p 9000:9000 -p 12201:12201/udp -p 1514:1514 -p 5555:5555/udp -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/" -e GRAYLOG_ROOT_TIMEZONE="Asia/Shanghai" -d graylog/graylog:4.0
    • graylog email配置
      • docker run --name graylog --link mongo --link elasticsearch -p 9000:9000 -p 12201:12201/udp -p 1514:1514 -p 5555:5555/udp -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/" -e GRAYLOG_ROOT_TIMEZONE="Asia/Shanghai" -e GRAYLOG_TRANSPORT_EMAIL_ENABLED=true -e GRAYLOG_TRANSPORT_EMAIL_HOSTNAME=mail.example.com -e GRAYLOG_TRANSPORT_EMAIL_PORT=587 -e GRAYLOG_TRANSPORT_EMAIL_USE_AUTH=true -e GRAYLOG_TRANSPORT_EMAIL_USE_TLS=true -e GRAYLOG_TRANSPORT_EMAIL_AUTH_USERNAME=you@example.com -e GRAYLOG_TRANSPORT_EMAIL_AUTH_PASSWORD=密码 -d graylog/graylog:4.0
  • graylog端口9000,1514是使用TCP协议,端口12201,5555是使用UDP协议

  • 参考文档:

skywalking

  • SkyWalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案
  • 部署:在bin目录下执行startup.bat或startup.sh即可启动服务,执行startup.bat之后会启动如下两个服务
    • Skywalking-Collector:追踪信息收集器,通过 gRPC/Http 收集客户端的采集信息 ,Http默认端口 12800,gRPC默认端口 11800。
    • Skywalking-Webapp:管理平台页面 默认端口 8080,登录信息 admin/admin
    • skywalking所在目录名称不能有空格
  • Agent使用,Skywalking 采用 Java 探针技术,对客户端应用程序没有任何代码侵入,使用起来简单方便,当然其具体实现就是需要针对不同的框架及服务提供探针插件。使用命令:
    • java -javaagent:G:\github\incubator-skywalking\skywalking-agent\skywalking-agent.jar -jar your_application.jar
  • Agent过滤URL,在SkyWalking的追踪信息页面不再显示(参考:https://www.jianshu.com/p/4bd310850dd0)
  • Skywalking的traceId与日志组件(log4j,logback,elk等)的集成,以logback为例,只要在日志配置xml中增加以下配置,则在打印日志的时候,自动把当前上下文中的traceId加入到日志中去,SkyWalking默认traceId占位符是%tid
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
        <pattern>
            %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %tid - %msg%n
        </pattern>
    </layout>
</appender>

canal

  • 基于数据库增量日志解析,提供增量数据订阅&消费
  • 测试时修改配置文件
    • conf\canal.properties
      // 默认值example,server上部署的instance列表,需要在canal.properties目录下建立同名的目录
      canal.destinations = example,example2
    • conf\example\instance.properties
      // 数据库地址
      canal.instance.master.address=192.168.1.20:3306
      // username/password,数据库的用户名和密码
      canal.instance.dbUsername = canal
      canal.instance.dbPassword = canal
      
      // 默认topic,动态topic规则匹配不到往默认topic投递消息
      canal.mq.topic=ds
      // 动态topic规则配置
      canal.mq.dynamicTopic=.*\\..*
  • canal配置:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart

XXL-JOB

  • XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展

Sentinel

  • Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能
  • 网关限流介绍
  • 启动命令:java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
  • Sentinel 1.7.2之前版本,如果在网关限流必须配置SPI机制加载GatewaySlotChainBuilder才能在网关限流,配置如下:
    • 在resources新建目录META-INF.services
    • 新建文件,文件名com.alibaba.csp.sentinel.slotchain.SlotChainBuilder
    • SlotChainBuilder文件内容:com.alibaba.csp.sentinel.adapter.gateway.common.slot.GatewaySlotChainBuilder
  • Sentinel 1.7.2开始不需要SPI配置

Sentinel-dashboard

  • sentinel控制台(已经有1.7.2, 1.8.0 demo)
    • 使用sentinel 1.8.0版本,簇点链路自动显示调用过资源名,在1.7.1版本必须在方式加入@SentinelResource才能显示
  • 修改sentinel控制台,将配置规则推送到nacos,使规则持久化
  • 修改代码 (基于sentinel控制台 1.8.0)
    • GatewayApiController API管理持久化
    • GatewayFlowRuleController 流控规则持久化
    • DegradeController 降级规则持久化
    • FlowControllerV2 集群流控规程持久化
    • DynamicRuleProvider
    • DynamicRulePublisher
  • 页面修改 (基于sentinel控制台 1.8.0)
    • sidebar.html取消dashboard.flow注释
  • 新增类型 (基于sentinel控制台 1.8.0)
    • com.alibaba.csp.sentinel.dashboard.config.NacosConfig
    • com.alibaba.csp.sentinel.dashboard.rule.GatewayDegradeRuleNacosProvider
    • com.alibaba.csp.sentinel.dashboard.rule.GatewayDegradeRuleNacosPublisher
    • com.alibaba.csp.sentinel.dashboard.rule.GatewayFlowRuleNacosProvider
    • com.alibaba.csp.sentinel.dashboard.rule.GatewayFlowRuleNacosPublisher
    • com.alibaba.csp.sentinel.dashboard.rule.GatewayApiRuleNacosProvider
    • com.alibaba.csp.sentinel.dashboard.rule.GatewayApiRuleNacosPublisher
    • com.alibaba.csp.sentinel.dashboard.rule.ClusterAssignRuleNacosPublisher
    • com.alibaba.csp.sentinel.dashboard.rule.ClusterServerNamespaceSetNacosProvider
    • com.alibaba.csp.sentinel.dashboard.rule.ClusterServerNamespaceSetNacosPublisher
    • com.alibaba.csp.sentinel.dashboard.rule.NacosConfigUtil
  • 修改日志
    • sentinel控制台 1.7.2 支持网关流控规则持久化
    • sentinel控制台 1.8.0 支持集群流控规则持久化

Sentinel 集群流控服务

  • 应用名:service-sentinel-server
  • 独立模式,采用独立应用部署
  • 嵌入模式,嵌入Web应用,可以启动多个实例分别作为 Token Server 和 Token Client。本Demo采用嵌入模式开发,独立模式部署运行,不嵌入到其他应用服务里

SEATA

RocketMQ 服务启动

  • 设置环境变量
// 路径名不能包含空格
ROCKETMQ_HOME="D:\rocketmq"
// 如果系统有多网卡,指定ip。broker启动会读取环境变量去连接name server
NAMESRV_ADDR="localhost:9876"
  • 启动 Name Server
.\bin\mqnamesrv.cmd
  • 启动 Broker
// autoCreateTopicEnable=true 允许应用自动创建topic
// -c 指定加载配置文件路径
.\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true -c conf/broker.conf

RocketMQ 控制台

docker run -d --name rocketmq-dashboard --link rocketmq -e "JAVA_OPTS=-Drocketmq.namesrv.addr=docker虚拟网卡ip:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest

uid 服务

  • 应用名:service-uid
  • 全局唯一ID生成服务,使用snowflake算法生成ID
  • 实现通过不能命名空间实现ID隔离,不同命名空间可能产生同一个ID
  • 压力测试方法:
    • com.demo.uid.service.SnowFlakeServiceTest.testParallelNextId

Repository Comments ( 0 )

Sign in to post a comment

About

一个SpringCloud demo项目 expand collapse
Java and 4 more languages
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
Java
1
https://git.oschina.net/85024610/spring-cloud-demo.git
git@git.oschina.net:85024610/spring-cloud-demo.git
85024610
spring-cloud-demo
spring-cloud-demo
master

Search