- 一、简介
- 1.1 官方描述
- 1.2 架构图
- 1.3 模块
- 二、项目搭建
- 2.1 maven
- 2.2 创建基础模块及基础功能
- 2.2.1 创建子模块
- 2.2.2 基础项目代码准备
1.2 架构图Spring Cloud Alibaba provides a one-stop solution for distributed application development. It contains all the components required to develop distributed applications, making it easy for you to develop your applications using Spring Cloud.
With Spring Cloud Alibaba, you only need to add some annotations and a small amount of configurations to connect Spring Cloud applications to the distributed solutions of Alibaba, and build a distributed application system with Alibaba middleware.
1.3 模块 二、项目搭建 2.1 maven图片来源:processon
创建maven项目,配置pom
2.2 创建基础模块及基础功能 2.2.1 创建子模块4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.2 cn.flowboot.e.commerce E-commerce-cloud 1.0-SNAPSHOT pom 1.0-SNAPSHOT Hoxton.SR12 2.2.7.RELEASE 1.16.18 3.11 4.4 5.6.0 0.11.2 1.2.78 3.4.2 1.2.6 1.21 3.0.0 2.3.2 2.1.4 1.3.1 5.8.0 5.8.0 2.11.0 1.4 3.2.2 4.1.2 1.7 org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring-cloud-alibaba.version} pom import org.projectlombok lombok ${lombok.version} org.apache.commons commons-lang3 ${commons-lang3.version} org.apache.commons commons-collections4 ${commons-collections4.version} commons-collections commons-collections ${commons.collections.version} cn.hutool hutool-all ${hutool-all.version} io.jsonwebtoken jjwt-api ${jwt.version} io.jsonwebtoken jjwt-impl ${jwt.version} io.jsonwebtoken jjwt-jackson ${jwt.version} com.alibaba fastjson ${fastjson.version} com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} com.alibaba druid-spring-boot-starter ${druid.version} eu.bitwalker UserAgentUtils ${bitwalker.version} com.github.pagehelper pagehelper-spring-boot-starter ${pagehelper.boot.version} com.github.oshi oshi-core ${oshi.version} net.java.dev.jna jna ${jna.version} net.java.dev.jna jna-platform ${jna.version} io.springfox springfox-boot-starter ${swagger.version} io.swagger swagger-models commons-fileupload commons-fileupload ${commons.fileupload.version} org.apache.poi poi-ooxml ${poi.version} com.github.penggle kaptcha ${kaptcha.version} spring-milestones Spring Milestones https://repo.spring.io/milestone false
创建子模块e-commerce-common和e-commerce-mvc-config
e-commerce-common/pom.xml
E-commerce-cloud cn.flowboot.e.commerce 1.0-SNAPSHOT 4.0.0 e-commerce-common jar 8 8 org.projectlombok lombok
e-commerce-mvc-config/pom.xml
E-commerce-cloud cn.flowboot.e.commerce 1.0-SNAPSHOT 4.0.0 e-commerce-mvc-config 8 8 cn.flowboot.e.commerce e-commerce-common org.springframework.boot spring-boot-starter-web
在主pom.xml添加模块管理
2.2.2 基础项目代码准备cn.flowboot.e.commerce e-commerce-common ${E-commerce-cloud} ... cn.flowboot.e.commerce e-commerce-mvc-config ${E-commerce-cloud}
e-commerce-common/…/CommonResponse
package cn.flowboot.e.commerce.vo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; @Data @AllArgsConstructor @NoArgsConstructor public class CommonResponseimplements Serializable { private final static int SUCCESS_CODE = 0; private final static String SUCCESS_MSG = "success"; private final static int FAIL_CODE = -1; private final static String FAIL_MSG = "fail"; private Integer code; private String message; private T data; public static CommonResponse build(Integer code, String message, T data){ return new CommonResponse (code,message,data); } public static CommonResponse build(Integer code, String message){ return new CommonResponse (code,message,null); } public static CommonResponse success(){ return new CommonResponse(FAIL_CODE,FAIL_MSG,null); } public static CommonResponse success( String message){ return new CommonResponse(FAIL_CODE,message,null); } public static CommonResponse success(String message,T data){ return new CommonResponse (FAIL_CODE,message,data); } public static CommonResponse fail(){ return new CommonResponse(FAIL_CODE,FAIL_MSG,null); } public static CommonResponse fail( String message){ return new CommonResponse(FAIL_CODE,message,null); } public static CommonResponse fail(String message,T data){ return new CommonResponse (FAIL_CODE,message,data); } }
e-commerce-mvc-config/…/annotation/IgnoreResponseAdvice
package cn.flowboot.e.commerce.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreResponseAdvice {
}
e-commerce-mvc-config/…/advice/CommonResponseDataAdvice
package cn.flowboot.e.commerce.advice;
import cn.flowboot.e.commerce.annotation.IgnoreResponseAdvice;
import cn.flowboot.e.commerce.vo.CommonResponse;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import java.util.Objects;
@RestControllerAdvice(value = "cn.flowboot.e.commerce")
public class CommonResponseDataAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter methodParameter, Class aClass) {
if (methodParameter.getDeclaringClass().isAnnotationPresent(IgnoreResponseAdvice.class)
|| Objects.requireNonNull(methodParameter.getMethod()).isAnnotationPresent(IgnoreResponseAdvice.class)){
return false;
}
return true;
}
@Override
public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType,
Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
CommonResponse response = CommonResponse.success();
if (null == o){
return CommonResponse.success();
} else if (o instanceof CommonResponse){
return o;
} else if (o instanceof String) {
response.setData(o);
return JSONObject.toJSONString(response);
} else {
response.setData(o);
return response;
}
}
}
e-commerce-mvc-config/…/advice/GlobalExceptionAdvice
package cn.flowboot.e.commerce.advice;
import cn.flowboot.e.commerce.vo.CommonResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
@Slf4j
@RestControllerAdvice
public class GlobalExceptionAdvice {
@ExceptionHandler(value = Exception.class)
public CommonResponse handlerCommerceException(HttpServletRequest req,Exception ex){
log.error("commerce service has error [{}]: {}",req.getRequestURI(),ex.getMessage(),ex);
return CommonResponse.fail("business error",ex.getMessage());
}
}
笔记系列简要目录
一、简介 1.1 官方描述 1.2 架构图 1.3 模块 二、项目搭建 2.1 maven 2.2 创建基础模块及基础功能 2.2.1 创建子模块 2.2.2 基础项目代码准备 三、Nacos 服务注册与配置中心 3.1 简介 3.2 安装使用 3.3 配置MySQL持久化 3.4 客户端编写 3.4.1 服务发现 3.4.2 服务配置 3.4.3 动态配置 3.4.4 配置共享 四、SpringBoot Admin 监控服务器 4.1 创建模块 4.2 启用Admin Server 4.3 配置yaml 4.4 安全配置 4.4.1 添加Security 4.4.2 配置账号 4.4.3 安全认证处理 4.5 监控警告 4.5.1 邮件通知 4.5.2 自定义监控 五、Gateway 5.1 架构图 5.2 Predicate 断言 5.3 路由 5.3.1 静态路由 5.3.2 动态路由 5.3.3 Nacos 配置 5.4 过滤器 5.4.1 全局过滤器 5.4.1 局部过滤器 六、链路监控 Sleuth+Zipkin 6.1 Zipkin 6.2 项目集成 6.3 持久化 6.4 Kafka数据传输 6.4.1 环境搭建 6.4.2 Zipkin 配置 6.5 采样策略 6.5.1 采样率策略 6.5.2 抽样策略 七、微服务通信 7.1 REST (RestTemlate) 7.2 OpenFeign 7.2.1 简单用例 7.2.2 优化 八、Hystrix 服务熔断 8.1 Hystrix 三种模式 8.2 熔断使用 8.2.1 注解的方式 8.2.2 编程的方式 8.3 Hystrix 请求缓存 8.3.1 编程的方式 8.3.2 注解的方式 8.4 请求合并 8.4.1 简介 8.4.2编程的方式 8.4.3 注解的方式 8.5 OpenFeign集成Hystrix 开启后备模式 8.6 监控面板 8.6.1 创建监控项目 8.6.2 打开监控面板 九、分布式事务Seata 9.1 @Transactional注解 9.2 分布式事务解决方案 9.3 Seata AT 9.3.1 Seata AT 概述 9.3.2 部署 9.3.3 系统集成 9.3.4 业务测试 十、消息驱动 10.1 Kafka 10.1.1 Spring Boot 集成 10.2 RocketMQ 10.2.1 搭建 10.2.2 Spring Boot 集成 10.3 RabbitMQ 10.3.1 环境搭建 10.3.2 Spring Boot 集成 10.4 Stream 10.4.1 简介 10.4.2 Stream Kafka 10.4.3 Stream RocketMQ 十一、Sentinel 流量控制 11.1 搭建SpringCloud Alibaba Sentinel控制台 11.2 项目集成 11.3 降级 11.3.1 接口降级 11.3.1.2 硬编码限流 11.3.1.2 控制面板限流 11.3.2 RestTemplate 降级 11.3.3 Feign 降级 11.4 Sentinel 存储 11.4.1 SpringCloud Alibaba Sentinel 结合 Nacos 11.5 Gateway 结合 Sentinel 11.5.1 添加依赖 11.5.2 硬编码配置 11.5.3 JSON文件配置方式 11.5.3 Nacos存储配置方式
Spring Cloud Alibaba 学习笔记项目:Github,学习笔记,仅为组件学习,并没有完整案例项目



