2 Star 6 Fork 3

_85024610 / spring-cloud-demo

Create your Gitee Account
Explore and code with more than 8 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
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 --SW_AGENT_NAME=应用名(必须英文) -jar your_application.jar 注意:8.5.0 加上--SW_AGENT_NAME设置服务名,否则会使用skywalking的默认值
    • druid监控,相关配置在com.demo.config.servlet,监控url:http://localhost:8763/druid/login.html 根据方法返回值将纯JSON格式字符串反序列化相应对象
    • Junit注解使用JunitAnnotaionTest.java
    • controller目录下功能
      • ValidateController 校验请求参数
      • SkywalkingController 配合skywalking功能调试
      • RequestHeaderController 请求头某个属性值JSON转换成对象
    • 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
      • spring功能使用
        • WebFlux提供WebClient
  • 注意:使用延迟初始化,只需要启动以下服务:
    • 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限制
        • 设计思路:
          • 定义proxy-topic,将发送自定义时间的延时消息统一发送到proxy-topic
          • 将自定义时间计算不同对应18个延时Level
          • 消费者接收延时消息后减去已在延时队列里的时间,重新计算对应的延时Level,再次投入proxy-topic,直到延时时间等于0直接发送到实际的topic
        • 类:
          • DelayProducer 延时消息生产者
          • RocketMQConfig 处理延时消息消费者
      • 使用RocketMQ订阅canal得到的数据库日志解析
      • 自定义注解@MqConsumer,该注解是方法级别使用。该注解具备@RocketMQMessageListener是一样功能,而且不用为每个主题定义一个类
      • 消息自动重发,确保消费端能把消息消费成功
        • 设计思路:
          • 生产者发送消息时,把回调key和回调tag设置在message的properties,随消息一起发送
          • 消费者定义回调主题,消费成功根据回调主题发送消息,消息体和tag从消息的properties获取回调key和回调tag
          • 生产者定义一个消费者消费回调消息,更新表flag者
          • 定时任务扫描表flag=0 and retry_num < 5的数据,重新发送
        • 类:
          • RocketCallbackConfig 定义消费者处理回调消息和生产者重新发消息
          • RocketMqConfigPropertites 处理回调消息的消费者配置
          • ServiceSharding 根据nacos获取服务实例数量再计算机器的分片值,根据分片获取指定重发数据再次重发消息
        • 流程图:
          avatar
    • Kafka使用

      • 实现延时消息
        • 设计思路:
          • 定义proxy-topic,将发送自定义时间的延时消息统一发送到proxy-topic
          • proxy-topic设置18个分区,定义每个分区对应不同延时Level
          • 将自定义时间计算不同对应18个延时Level,然后将消息投入到指定分区
          • 消费者接收消息后计算消息发送时间 + 分区延时时间是否大于当前时间。
            • 大于等于当前时间, 重新计算消息延时,公式:消息延时时间 - (当前时间 - 消息发送时间 - 分区延时时间)。重新计算对应的延时Level,再次投入proxy-topic并指定分区
            • 小于当前时间,不消费消息,等待下一次消费
        • 类:
          • KafkaDelayProducer 延时消息生产者
          • KafkaConsumeDelayMsgConfig 处理延时消息消费者

service-miya

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

service-gateway

  • 使用springcloud gateway作为网管,实现统一路由方式
  • 功能:
    • 自定义filter,实现解释token后,将uid赋值到body对象里
    • 接入阿里Sentinel实现网关流控,配合Sentinel-dashboard使用时,启动命令必须添加启动参数Dcsp.sentinel.app.type=1,这样才能sentinel dashboard显示网关api分组配置
    • 新服务上线自动添加路由规则,实现功能在com.example.servicegateway.route.rule
      • 流程图:
        avatar

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 --SW_AGENT_NAME=应用名(必须英文) -jar your_application.jar
      • 参数说明:
        • --SW_AGENT_NAME 定义服务名称,在skywalking ui显示对应服务(8.5.0不添加此参数,默认显示Your_Application。在6.x不需要配置,直接显示spring.application.name的值)
  • 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>
  • 日志上报skywalking配置(skywalking grpc 日志收集 8.4.0版本开始支持)
<appender name="skywalking-grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
        </layout>
    </encoder>
</appender>
// 配置文件路径:agent\config\agent.config
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
  • skywalking告警
  • skywalking 子线程与主线程输出相同trace id
    • 在skywalking-agent.jar目录找到 bootstrap-plugins 文件夹
    • bootstrap-plugins/apm-jdk-threading-plugin-8.8.0.jar 复制到 plugins 文件夹下
    • config/agent.config的plugin.jdkthreading.threading_class_prefixes配置包含实现多线程类的包路径, 例如:plugin.jdkthreading.threading_class_prefixes=com.demo 目前不支持java 8 CompletableFuture输出trace id

XXL-JOB

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

nacos

startup.cmd -m standalone

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

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