Giter Site home page Giter Site logo

java-training-camp's Introduction

java-training-camp's People

Contributors

dependabot[bot] avatar kevinwang0224 avatar kurok1 avatar mercyblitz avatar moa-oma avatar plutokaito avatar walklown avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

java-training-camp's Issues

作业十:动态地替换 Java System Propeties

要求

在 Spring Boot 工程中,动态地替换 Java System Propeties ,避免并发锁阻塞等问题

提示

在 Spring Boot org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent 阶段替换 Java System Propeties PropertySource,其中它的 name 为 :org.springframework.core.env.StandardEnvironment#SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME

第二期 作业四:理解并完成 Spring 事务传播机制与 EJB 规范的联系

要求

  1. (必须)阅读 EJB 2.1 规范章节《17.6.2 Container-Managed Transaction Demarcation for Session and Entity Beans》,并且文档描述 Spring 事务传播行为:
  • Mandatory
  • Never
  1. (必须)找到对应的 Spring 实现源码,并且说明规范与代码之间的联系。

  2. (可选)补充 NOT_SUPPORTED、REQUIRED 和 REQUIRED_NEW 的内容。

提示:参考 spring-tx AbstractPlatformTransactionManager

第二期 作业七:配置验证

要求

实现客户端与服务端的配置版本控制,提供合法性校验等手段,确保客户端配置是合法有效的

提示

  1. 配置服务器:简单的 REST 内存型数据(推荐使用 Spring Boot Web)

  2. 配置结构设计

  • 配置内容
  • 配置元信息
    • 配置内容 MD5 加密 checksum
    • 配置时间(创建、修改)
    • 配置媒体类型(JSON、XML)
  1. 客户端和服务器之间使用 REST 通讯(可使用 Spring RestTemplate)
  • (必须)配置获取
  • (可选)配置增加
  • (可选)配置删除
  • (可选)配置变更

参考嵌入式 Web 服务器: https://github.com/nacos-group/nacos-spring-project/blob/develop/nacos-spring-samples/nacos-embedded-webserver

第二期 作业一:使用 SOFAJRAFT 实现状态机

内容

  1. (必须)补充官方 exmaple ElectionBootstrap 增加 Follower 节点日志信息,参考 Leader 事件实现
  2. (可选)补充官方 exmaple counter 增加 CounterOperation 的操作符,比如 DECREMENT,实现 decrementAndGet 方法,类似于 Atomic 类

作业六:Micrometer 整合 Redis Spring

要求

Redis Spring API 监控指标注册到 MeterRegistry

监控目标

ValueOpertions 中的 set 方法

监控指标

必须

● set 方法执行时间(Timer):response time
● set 方法调用次数(Counter):count

可选

● set 方法成功率(Guage):success rate

参考实现

https://github.com/microsphere-projects/microsphere-spring-projects/tree/main/microsphere-spring/microsphere-spring-redis

提示

使用动态代理的方式拦截 Spring Redis RedisConnection 接口,因为该接口是所有的 Redis 命令的底层实现。

作业八:基于 Byte Buddy 实现 Spring WebMVC Controller 拦截日志

要求

针对 com.acme.biz.api.interfaces.UserRegistrationService 接口实现类 - com.acme.biz.web.service.InMemoryUserRegistrationService,redefine registerUser 方法,增加日志功能,如某个 User 被注册

进阶实现

针对 com.acme.biz.web.mvc.controller.UserRegistrationController 来实现以上功能

第二期 作业三:基于 Apache Curator 实现分布式配置管理

要求

  1. (必须)基于 Apache Curator 对 Zookeeper 操作,以及对 Spring Environment(PropertySources)整合,实现分布式配置管理

  2. (可选)基于 1 的基础上,实现在 Spring 场景下的配置变换监听。
    提示:基于 Spring ApplicationEvent 来实现,参考:https://github.com/nacos-group/nacos-spring-project/tree/develop/nacos-spring-context

  3. (可选)基于 1 的基础上,实现配置元数据管理,如:增加配置媒体类型,Content-Type: text/properties、text/json,增加 Content-Length(流媒体)

作业一:Spring Cloud Open Feign 包装 POJO API 模型

要求

基于 Spring Cloud Open Feign 隐形包装 POJO 成为 API 模型,实现接口编程友好性目的。
最简化 @FeignClient 初始化

知识回顾

Java 动态代理

@FeignClient 工作原理

现状分析

UserRegistrationService 接口对应服务端 Endpoint:http://127.0.0.1:8080/user/register

@FeignClient("${user-registration.service.name}")
@RequestMapping("/user")
public interface UserRegistrationService {

    @PostMapping(value = "/register",produces = "application/json;v=3.0")
    Boolean registerUser(@RequestBody @Validated @Valid User user) throws UserException;

}

@FeignClient 指向的应用名称:${user-registration.service.name}

激活 FeignClient

@EnableFeignClients

提示

  • 通过扩展 Encoder 和 Decoder 控制 POJO 的解析
  • 通过调用请求头控制新老版本的切换

提交

可基于 https://github.com/mercyblitz/java-training-camp 项目二次开发,请在下方评论中提交自己的 GitHub代码仓库。

作业七:基于 Micrometer 搭建微服务监控平台

具体要求

1. 创建自定义的 Metrics

Metrics 名称(自由发挥)
必须 Tags:

  • 应用
  • 服务实例 ID
  • 应用环境:TEST、STAGING、PROD

可选 Tags 自己决定

2. 将 Metrics 导出到 InfluxDB

搭建 InfluxDB 环境
创建 InfluxDB 数据库
通过 Spring Boot Influx Client 导出

3. 将 Grafana 添加 InfluxDB 数据源

4. 在 Grafana 展示自定义 Metrics

a. 熟悉 InfluxDB SQL 语法
b. 理解不同 Metrics 类型在图形化界面的展示
c. 导出模板 JSON 文件

5. 高阶:可选实现

替代 Spring Boot InfluxMetricsExportAutoConfiguration 实现,提供断点续传的能力的 InfluxDB 的推送,具体而言:

  1. 将 Metrics 导出到以本地文件的 MeterRegistry 实现(类似于日志实现)
  2. 独立 Metrics 上报进程
    1. 将本地文件 Metrics 数据同步到 InfluxDB(可参考独立进程)
    2. 实现调度任务,可记录上次成功提交的数据的偏移量(类似 Kafka Offset)

作业九:Spring Cloud Gateway 稳定性设计

题目一:网关监控设计

要求:Spring Cloud Gateway 整合 Micrometer 实现指标监控

题目二:网关链路跟踪设计

要求:Spring Cloud Gateway 整合 Spring Cloud Sleuth 实现链路跟踪

提示:可基于 Spring WebFlux 实现通用化

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.