论坛凯发推荐首页 编程语言技术论坛

[完结26章]java主流分布式欧洲杯足彩官网的解决方案多场景设计与实战 -欧洲杯足彩官网

浏览 94 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2023-12-21  
资料下载地址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;
}
本文到此结束,感谢大家的阅读,希望对大家有所帮助!
 
global site tag (gtag.js) - google analytics
网站地图