[完结26章]Java主流分布式解决方案多场景设计与实战

赵嬷嬷
• 阅读 145

资料下载地址1:https://pan.baidu.com/s/1D12W1UdWxw7uYW3SHAWQiw 提取码:q5p5 资料下载地址2:https://share.weiyun.com/KXInzo28 密码:85dqf9

java中常用的分布式方法有哪些呢? 分布式系统分布式存储:GFS,HDFS(HBase) 分布式计算系统: MapReduce 消息中间件: Kafka 分布式处理管理器: Zookeeper RocketMQ : 负载均衡技术 分布式缓存技术: Redis 分布式锁 分布式系统设计 分布式优化策略

众所周知,随着互联网数据井喷式的发展,分布式技术应运而生。分布式因其高性能、高可用、高扩展的特点,成为微服务项目的基石。本篇文章将针对分布式六大主流问题进行多方案对比解析,多场景实战讲解,让大家深度掌握分布式原理和实战。我将分别从源码、手撸框架、实战演练等多个方面进行多维度深入讲解,让你轻松掌握分布式各种解决方案。

多方案设计六大分布式解决方案 1.掌握分布式锁多种解决方案 2.掌握分布式事务多种解决方案 3.掌握分布式ID和分库分表多种解决方案 4.掌握分布式Session和分布式调度解决方案度解决方案

多场景落地六大分布式解决方案 1.实战分布式锁实现高并发引起的超卖问题 2.实战Redisson框架解决用户重复注册问题 3.实战Seata事务解决下订单减库存一致性问题 4.实战Sharding-JDBC实现商品信息管理

下面,我将从代码实战给大家做详细说明: 引入GraceJSONResult,结合枚举对接口返回数据进行优雅的封装 package com.imooc.grace.result;

import java.util.Map;

/**

  • 自定义响应数据类型枚举升级版本

  • @Title: IMOOCJSONResult.java

  • @Package com.imooc.utils

  • @Description: 自定义响应数据结构

  • 本类可提供给 H5/ios/安卓/公众号/小程序 使用

  • 前端接受此类数据(json object)后,可自行根据业务去实现相关功能

  • @Copyright: Copyright (c) 2020

  • @Company: www.imooc.com

  • @author 慕课网 - 风间影月

  • @version V2.0

  • / public class GraceJSONResult {

    // 响应业务状态码 private Integer status;

    // 响应消息 private String msg;

    // 是否成功 private Boolean success;

    // 响应数据,可以是Object,也可以是List或Map等 private Object data;

    /**

    • 成功返回,带有数据的,直接往OK方法丢data数据即可
    • @param data
    • @return
    • / public static GraceJSONResult ok(Object data) { return new GraceJSONResult(data); } /**
    • 成功返回,不带有数据的,直接调用ok方法,data无须传入(其实就是null)
    • @return
    • / public static GraceJSONResult ok() { return new GraceJSONResult(ResponseStatusEnum.SUCCESS); } public GraceJSONResult(Object data) { this.status = ResponseStatusEnum.SUCCESS.status(); this.msg = ResponseStatusEnum.SUCCESS.msg(); this.success = ResponseStatusEnum.SUCCESS.success(); this.data = data; }
/**
 * 错误返回,直接调用error方法即可,当然也可以在ResponseStatusEnum中自定义错误后再返回也都可以
 * @return
 */
public static GraceJSONResult error() {
    return new GraceJSONResult(ResponseStatusEnum.FAILED);
}

/**
 * 错误返回,map中包含了多条错误信息,可以用于表单验证,把错误统一的全部返回出去
 * @param map
 * @return
 */
public static GraceJSONResult errorMap(Map map) {
    return new GraceJSONResult(ResponseStatusEnum.FAILED, map);
}

/**
 * 错误返回,直接返回错误的消息
 * @param msg
 * @return
 */
public static GraceJSONResult errorMsg(String msg) {
    return new GraceJSONResult(ResponseStatusEnum.FAILED, msg);
}

/**
 * 错误返回,token异常,一些通用的可以在这里统一定义
 * @return
 */
public static GraceJSONResult errorTicket() {
    return new GraceJSONResult(ResponseStatusEnum.TICKET_INVALID);
}

/**
 * 自定义错误范围,需要传入一个自定义的枚举,可以到[ResponseStatusEnum.java[中自定义后再传入
 * @param responseStatus
 * @return
 */
public static GraceJSONResult errorCustom(ResponseStatusEnum responseStatus) {
    return new GraceJSONResult(responseStatus);
}
public static GraceJSONResult exception(ResponseStatusEnum responseStatus) {
    return new GraceJSONResult(responseStatus);
}

public GraceJSONResult(ResponseStatusEnum responseStatus) {
    this.status = responseStatus.status();
    this.msg = responseStatus.msg();
    this.success = responseStatus.success();
}
public GraceJSONResult(ResponseStatusEnum responseStatus, Object data) {
    this.status = responseStatus.status();
    this.msg = responseStatus.msg();
    this.success = responseStatus.success();
    this.data = data;
}
public GraceJSONResult(ResponseStatusEnum responseStatus, String msg) {
    this.status = responseStatus.status();
    this.msg = msg;
    this.success = responseStatus.success();
}

public GraceJSONResult() {
}

public Integer getStatus() {
    return status;
}

public void setStatus(Integer status) {
    this.status = status;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

public Object getData() {
    return data;
}

public void setData(Object data) {
    this.data = data;
}

public Boolean getSuccess() {
    return success;
}

public void setSuccess(Boolean success) {
    this.success = success;
}

}

通过自定义异常,优雅的封装,可以很好的解耦代码,在抛出错误的时候,不必受到其他返回类型的限制。想抛就抛~ /**

  • 统一异常拦截处理

  • 可以针对异常的类型进行捕获,然后返回json信息到前端

  • / @ControllerAdvice public class GraceExceptionHandler {

    @ExceptionHandler(MyCustomException.class) @ResponseBody public GraceJSONResult returnMyException(MyCustomException e) {

      e.printStackTrace();
      return GraceJSONResult.exception(e.getResponseStatusEnum());

    } }

目前已经结合mq的模型,实现了异步解耦。接下来就需要修改目前的代码。去实现系统消息的发送: 扩展枚举: public enum MessageEnum { FOLLOW_YOU(1, "关注", "follow"), LIKE_VLOG(2, "点赞视频", "likeVideo"), COMMENT_VLOG(3, "评论视频", "comment"), REPLY_YOU(4, "回复评论", "replay"), LIKE_COMMENT(5, "点赞评论", "likeComment");

public final Integer type;
public final String value;
public final String enValue;

MessageEnum(Integer type, String value, String enValue) {
    this.type = type;
    this.value = value;
    this.enValue = enValue;
}

} 根据每次请求的url地址,hash后访问到固定的服务器节点。 upstream tomcats { # url hash hash $request_uri; # 最少连接数 # least_conn

server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;

}

server { listen 80; server_name www.tomcats.com;

location / {
    proxy_pass  http://tomcats;
}

} 在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件 @Value("${alibaba.teacher.name}") private String name; @Value("${alibaba.teacher.age}") private Integer age;

@GetMapping("/info") public Object info() { return name + "-" + age; } 本文到此结束,感谢大家的阅读,希望对大家有所帮助!

点赞
收藏
评论区
推荐文章
荀勗 荀勗
5个月前
高性能多级网关与多级缓存架构落地实战(完结+附电子书)
参考资料地址1:https://pan.baidu.com/s/12w0TT26aywnoIcogPg8Uw提取码:uzf4参考资料地址2:https://share.weiyun.com/SNltUNLW密码:zi3dc7什么是网关?网关(Gateway
赵颜 赵颜
5个月前
[16章]SpringBoot2 仿B站高性能前端+后端项目(2023新版)
资料地址1:https://pan.baidu.com/s/1cxQDKIi7iu1mGmjRr9a0Mw提取码:tz5s资料地址2:https://pan.baidu.com/s/1DjmuC6Id4oUCNVbxfgcMg提取码:qtf3今天给大家讲讲
吉太 吉太
5个月前
[2023新版16章]SpringBoot+Vue3 项目实战,打造企业级在线办公系统
参考资料地址1:https://pan.baidu.com/s/1ZJGS0SA9pIUr76VUXioNSg提取码:95bd参考资料地址2:https://share.weiyun.com/jVSDdcBU密码:cruqf9SpringBootVue3
荀勗 荀勗
5个月前
Java主流分布式解决方案多场景设计与实战(完结26章)
资料下载地址1:https://pan.baidu.com/s/1hKQFuPt08YtSSsUDX5JEA提取码:swhy资料下载地址2:https://share.weiyun.com/KXInzo28密码:85dqf9目前主流的Java分布式框架有哪
赵嬷嬷 赵嬷嬷
5个月前
[完结13章]一课掌握Java并发编程精髓
资料地址1:https://pan.baidu.com/s/1AcAiXR8afHlpMbdIGVkx3w提取码:7skv资料地址2:https://share.weiyun.com/VtbcAU8C密码:gmqctfJava并发编程从入门到进阶多场景实战
赵嬷嬷 赵嬷嬷
4个月前
[完结10章]Vue3+Pinia+Vite+TS 还原高性能外卖APP项目
参考资料地址1:https://pan.baidu.com/s/1u0uNBMkOA2NRk3N6myb4Zg提取码:tnlt参考资料地址2:https://share.weiyun.com/Wjw3QpeQ密码:gxrfcwVue3带来的改变,除了其自身
吉太 吉太
2个月前
AI Agent智能应用从0到1定制开发[12章]
下载地址1:https://pan.baidu.com/s/15IbktHy54IdZRg3g7PWWKQ提取码:v7lt下载地址2:https://pan.baidu.com/s/1itYcy6EHYLRZSvj2D5e00A提取码:9jdp一、那为啥最
吉太 吉太
1个月前
新版React18+Next.js14+Nest.js全栈开发复杂低代码项目[21章]
资料地址1:https://pan.baidu.com/s/1CpBiE0X4vq9dAoZZCow0bw提取码:wwq9资料地址2:https://share.weiyun.com/vXd3qr0O密码:bcrymy2024版,React18Nest.
鲍二家的 鲍二家的
1个月前
[完结17章]SpringBoot3+Vue3 开发高并发秒杀抢购系统
学习地址1:https://pan.baidu.com/s/1DRZXkQeGkrPwhVTd2ko00g提取码:gpwn学习地址2:https://share.weiyun.com/ysK13sR2密码:74m96t众所周知,作为开发新手,入行、实习、转
鲍二家的 鲍二家的
1个月前
[完结12章]AI Agent智能应用从0到1定制开发
资料地址1:https://pan.baidu.com/s/19YsA0yYI3Q9ebr3iFSJBw提取码:hvhu资料地址2:https://share.weiyun.com/NfCB6NdF密码:rhame3AIAgent已成为企业在构建智能化的定