
Java架构直通车
文章平均质量分 94
No_Game_No_Life_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java架构直通车——秒杀系统 分析和设计
文章目录秒杀系统业务特点 & 技术挑战架构原则 & 设计前端设计网关设计服务端设计数据库层设计服务重启与服务降级其他优化点案例:利用消息中间件和缓存实现简单的秒杀系统本文旨在系统性的梳理两个经典系统的实现。秒杀系统业务特点 & 技术挑战正常电子商务流程:(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务流程:(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;结合业务原创 2021-08-19 16:14:43 · 576 阅读 · 0 评论 -
Java架构直通车——DispatcherServlet详解
文章目录引入DispatcherServlet处理流程DispatcherServlet与WebApplicationContext处理流程DispatcherServlet源码分析init()service()destroy()前文介绍了Java架构直通车——理解Tomcat架构设计,我们知道Tomcat实际上就是Servlet容器,引入Spring MVC框架是围绕DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时原创 2021-05-11 16:28:16 · 1388 阅读 · 0 评论 -
Java架构直通车——理解Tomcat架构设计
文章目录引入Socket与SeverSocket一个简单Web容器设计与实现理解Tomcat架构设计什么是ServletTomcat——Servlet容器引入Socket与SeverSocketSocketSocket是网络连接的一个端点。套接字使得一个应用可以从网络中读取和写入数据。放在两 个不同计算机上的两个应用可以通过连接发送和接受字节流。在 Java 里边,套接字指的是java.net.Socket类。public Socket (java.lang.String host, int原创 2021-05-11 15:20:47 · 468 阅读 · 2 评论 -
Java架构直通车——以Tomcat为例谈双亲委派模型的破坏
文章目录引入Tomcat类加载器是怎么样的?引入之前文章Java架构直通车——以JDBC为例谈双亲委派模型的破坏谈到了对于双亲委派模型的破坏,原因是启动类、拓展类加载器并不能加载jdbc Driver,而只有应用类加载器可以;所以需要在启动类加载器中获取到应用类加载器并加载这个类。而在Tomcat中,也是由于同样的原因:在Java核心类里面有SPI(Service Provider Interface),它由Sun编写规范,第三方来负责实现。SPI需要用到第三方实现类。如果使用双亲委派模型,那么第原创 2021-05-11 14:55:52 · 366 阅读 · 0 评论 -
Java架构直通车——避不开的COW奶牛
文章目录引言Linux下的COWRedis下的COW文件系统下的COW引言在Java架构直通车——Redis持久化和宕机恢复机制一文中曾经提到过COW(写时复制机制),在执行BGSAVE命令或者BGREWRITEAOF命令(AOF重写)的过程中,Redis需要创建fork()当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)来优化子进程的使用效率。所以,在说明Linux下的copy-on-write机制前,我们首先要知道两个函数:fork()和exec(),需要注意的原创 2020-08-25 20:01:08 · 499 阅读 · 0 评论 -
Java架构直通车——使用RabbitMQ延时队列做回调
文章目录前言解决方案引入RabbitMQRabbitMQ延时队列概述后端代码实现前言最近做区块链项目时,由于区块链做存证的时候会有延迟(区块链默认会收集2秒内所有的transanction,然后做统一计算,打包上链),所以后端请求该接口的时候,不能立刻得到返回,只能返回状态为200的成功响应。考虑到在不增加复杂度的情况下,不能要求客户端做二次请求,因为客户端做二次请求的时候是不知道服务端是否已经处理完成该上链请求的。所以,这部分的处理只能服务端完成后做 延时回调。“延时回调”准确的说是实现 阶梯性异原创 2020-08-23 16:38:59 · 973 阅读 · 0 评论 -
Java架构直通车——Dubbo总结
文章目录什么是 Dubbo?RPC的原理是什么?既有 HTTP ,为啥用 RPC 进行服务调用?为什么要用Dubbo?Dubbo 的架构使用Registry好处Dubbo 提供的负载均衡策略之前对于Dubbo只做了点初步的了解,具体参考:Dubbo。主要是关于用法的,没有怎么去深究。今天由于面试的需要,做一份总结吧。什么是 Dubbo?Apache Dubbo是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力: 面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现原创 2020-07-01 17:16:10 · 784 阅读 · 1 评论 -
Java架构直通车——过滤器和拦截器使用
文章目录过滤器和拦截器的区别Filter过滤器Interceptor拦截器过滤器和拦截器的区别规范不同:Filter是Servlet规范中定义的,是Servlet容器支持的。而拦截器是Spring容器内的,是Spring框架支持的。作用深度不同:Filter在Servlet前后起作用,而拦截器可以深入到方法的前后、异常抛出前后起作用,具有更大的弹性。从设计模式的角度分析:过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。(漏网)原创 2020-07-01 11:18:32 · 445 阅读 · 0 评论 -
Java架构直通车——彻底了解DIP、IOC与DI之间的关系
文章目录DIP、IOC与DI之间的关系DIP实例参考IOC实例参考DI本来这个文章是面试准备:Spring/Spring MVC常见面试题汇总的一个小问题,但是觉得需要扩充的内容太多,就单独写成一个文章了。DIP、IOC与DI之间的关系DIP原本的依赖是高层依赖于底层。假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底盘,底盘依赖轮子。这样做的坏处是什么呢? 可维护性很低 。假设设原创 2020-06-30 12:06:21 · 743 阅读 · 0 评论 -
Java架构直通车——Redis的PF实现原理:HyperLogLog
文章目录引入什么是基数统计基数统计的常用方法HyperLogLog原理再近一步:分桶平均更近一步:真实的HyperLogLog引入之前的文章Java架构直通车——点赞功能用Mysql还是Redis?一文中,我们介绍了分别从mysql和redis实现点赞功能统计的可行性。这里要介绍一个HyperLogLog算法,虽然应用场景不同,但是两者还是具有一定的相似之处的。HyperLogLog 是最早由 Flajolet 及其同事在 2007 年提出的一种 估算基数的近似最优算法。但跟原版论文不同的是,好像很原创 2020-06-29 17:12:29 · 4134 阅读 · 0 评论 -
Java架构直通车——RedLock是否可以做分布式锁
文章目录引入:Redis SetNX局限性RedLock原理解决宕机恢复后锁的问题单机锁和多机锁的比较为什么RedLock是不可靠的!引入:Redis SetNX局限性我在Java架构直通车——基于Redis的Set NX实现分布式锁一文中写了,采用SetNX会出现两个问题,一个是超时问题,可以采用随机值解决。另一个是主从切换或者宕机恢复后的锁的问题,这个问题是否能用RedLock解决呢?所以首先来看下RedLock的原理。RedLock原理Redis 官方站这篇文章提出了一种权威的基于 Redi原创 2020-06-29 15:56:47 · 495 阅读 · 0 评论 -
Java架构直通车——点赞功能用Mysql还是Redis?
文章目录引入使用Mysql实现点赞功能使用Redis实现点赞功能使用什么数据格式最合适?方案引入最近遇到一个需求,就是做联盟链做存证上,部分交易对外公开,或者是对指定人可见。之前一直在思考用Mysql怎么存合适,想来想去也没找出个合适的办法。点赞功能场景和上面的需求是一样的,我就借这个简单一些的点赞功能来理清下思路把。我们先看点赞功能的需求:显示点赞数量判断用户是否点过赞,用于去重,必须的判断显示个人点赞列表,一般在用户中心显示微博/文章的点赞列表微博这是头部的顶级流量,后端肯定是有原创 2020-06-18 18:38:47 · 842 阅读 · 0 评论 -
Java架构直通车——分布式唯一 ID生成方案
文章目录分布式ID的几种生成方案UUIDMySQL主键自增雪花算法(SnowFlake)最近要做区块链项目,要生成很多唯一ID做业务号之类的,所以趁此机会学习学习。分布式ID的几种生成方案UUID之前一直是用的UUID生成唯一ID,好处显而易见,方便快捷,坏处就是:数据库里不好做索引,每次生成的ID是无序的,无法保证趋势递增。UUID的字符串存储,存储空间大,查询效率慢。ID本事无业务含义,不可读。很明显,用来做业务号不是UUID的应用场景,使用UUID应该要保障不要求递增,无确实含义的原创 2020-06-18 15:31:54 · 1088 阅读 · 0 评论 -
Java架构直通车——锁分段技术:微信如何扛住 10 亿用户同时修改微信号?
文章目录引入从HashMap到ConcurrentHashMap的转变:理解锁分段技术HashMap的死循环ConcurrentHashMap的实现方式---**锁桶**(或段)ConcurrentHashMap的真实结构分段锁优化超卖问题分布式锁并发优化方案的不足引入今天在知乎突然看到了这么一个问题:微信如何扛住 10 亿用户同时修改微信号?微信号逻辑上应该是每一个微信账号的 unique key,在以往的场景下写入负载不是很高所以问题不大,但是现在允许修改微信号之后应该怎么处理这么大的并发写入原创 2020-06-11 22:09:17 · 670 阅读 · 0 评论 -
Java架构直通车——以JDBC为例谈双亲委派模型的破坏
文章目录引入JDBC4.0之前JDBC4.0之后引入java给数据库操作提供了一个Driver接口:public interface Driver { Connection connect(String url, java.util.Properties info) throws SQLException; boolean acceptsURL(String url) throws SQLException; DriverPropertyInfo[] getPr原创 2020-06-04 12:28:30 · 481 阅读 · 2 评论 -
Java架构直通车——ArrayList和LinkedList底层原理解析
文章目录ArrayList实现原理初始化扩容方式add()方法实现接口线程安全与否LinkedList实现原理初始化add()方法实现接口线程安全与否总结:面试如何介绍ArrayList和LinkedListArrayList实现原理初始化ArrayList的底层是一个动态数组,初始化时,ArrayList首先会对传进来的初始化参数initalCapacity进行判断:如果参数等于0,则将数组初始化为一个空数组,如果不等于0,将数组初始化为一个容量为10的数组。不过,与HashMap一样,A原创 2020-06-02 17:00:27 · 826 阅读 · 0 评论 -
Java架构直通车——Redis持久化和宕机恢复机制
文章目录Redis持久化机制RDBAOFRedis宕机恢复机制Redis持久化机制我们都知道Redis是基于内存的,那么当Redis节点宕机后,要保证宕机恢复,Redis必须要有一个持久化的机制,持久化的话是Redis高可用中比较重要的一个环节。Redis持久化有两种方式:RDB:RDB 持久化机制,是对 Redis 中的数据执行周期性的持久化。AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,因为这个模式是只追加的方式,所以没有任何磁盘寻址的开销原创 2020-05-29 17:57:23 · 477 阅读 · 0 评论 -
Java架构直通车——Redis主从数据同步机制
文章目录同步机制全量复制增量复制同步故障处理拷贝超时积压缓冲区拷贝溢出slave全量同步的响应问题同步机制Redis的主从同步机制可以确保redis的master和slave之间的数据同步。Redis在2.8及以上版本使用psync命令完成主从数据同步。同步方式包括:全量复制增量复制全量复制slave第一次启动时,连接Master,发送PSYNC命令,格式为psync {runId} {offset}{runId} 为master的运行id;{offset}为slave自己的复制偏原创 2020-05-29 16:51:54 · 571 阅读 · 0 评论 -
Java架构直通车——为什么线程切换会导致用户态与内核态的切换?
文章目录什么是上下文切换?上下文切换的时机?上下文切换的开销互斥锁与自旋锁为什么线程切换会导致用户态与内核台的切换?什么是上下文切换?上下文切换的时机?CPU通过分配时间片来执行任务,当一个任务的时间片用完,就会切换到另一个任务。在切换之前会保存上一个任务的状态,当下次再切换到该任务,就会加载这个状态。——任务从保存到再加载的过程就是一次上下文切换。按导致上下文切换的因素划分,可将上下文切换分为两点:自发性上下文切换非自发性上下文切换自发性上下文切换指线程由于自身因素导致的切出。通过调原创 2020-05-13 16:26:20 · 6080 阅读 · 4 评论 -
Java架构直通车——Java8 HashMap详解
文章目录1. HashMap 初始大小为何是 16?2. 懒加载3. 树化4. 扩容resize()5. get(Object key)方法之前了解过Java并发编程实战——并发容器之ConcurrentHashMap(JDK 1.8版本),其实已经对HashMap做了一个大致的了解,这里我们来解释一下HashMap一些相关的问题。Java8 ConcurrentHashMap结构基本上和Ja...原创 2020-04-20 11:58:44 · 559 阅读 · 0 评论 -
Java架构直通车——BIO、NIO、AIO
文章目录同/异、阻/非堵塞同/异、阻/非堵塞 组合IO的理解BIO/NIO/AIOBIONIO 多路复用NIO三个核心对象:通道(Channel)、缓冲区(Buffer)和选择器(Selector)AIOselect、poll、epoll之间的区别同/异、阻/非堵塞虽然我在之前的文章中提到过同步异步、阻塞与非阻塞,但是我认为当时的解释不是很到位,对此,我再次补充解释。同步就是一个任务的完成需...原创 2020-04-27 16:49:52 · 734 阅读 · 0 评论 -
Java架构直通车——深入理解B+树
文章目录引入:AVL树和B树AVL树红黑树B树(B-树)数据库为什么不使用二叉树?为什么使用B+树(与B树的区别)引入:AVL树和B树AVL树平衡二叉搜索树是基于二分法的策略提高数据的查找速度的二叉树的数据结构;平衡二叉搜索树的数据结构组装过程有以下规则:(1)非叶子节点只能允许最多两个子节点存在。(2)每一个非叶子节点数据分布规则为左边的子节点小当前节点的值,右边的子节点大于当前节点的...原创 2020-04-26 16:26:26 · 649 阅读 · 0 评论 -
Java架构直通车——过滤器、拦截器、AOP的区别
文章目录过滤器拦截器AOP(面向切面)三者使用场景过滤器过滤器拦截的是URLSpring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当前请求地址是否配置有过滤器,有则调用该过滤器的方法(可能会有多个过滤器),然后才调用真实的业务逻辑,至此过滤器任务完成。过滤器并没有定义业务逻辑执行前、后等,仅仅是请求到达就执行。特别注意:过滤器方法的入参...原创 2020-04-22 11:38:02 · 375 阅读 · 0 评论 -
Java架构直通车——幂等性接口设计
文章目录接口设计与重试机制引发的问题保证幂等性的策略CRUD操作实现幂等性策略select操作delete操作接口设计与重试机制引发的问题在实际业务中,可能会遇到以下的问题:提交订单按钮如何防止重复提交?并且还要区分是误操作造成的重复提交,还是用户主动发起的重复提交。比如多次点击提交订单,后台只生成一个订单。微服务接口,客户端重试时,会对数据产生影响吗?比如支付时,由于网络问题重发,...原创 2020-03-19 17:03:58 · 831 阅读 · 0 评论 -
Java架构直通车——结合源码理解PageHelper
PageHelper实现方式?PageHelper首先将前端传递的参数保存到page这个对象中,接着将page的副本存放入ThreadLoacl中,这样可以保证分页的时候,参数互不影响。接着利用了mybatis提供的拦截器,取得ThreadLocal的值,重新拼装分页SQL,执行查询的时候通过拦截器在sql语句中添加分页参数,之后实现分页查询。最后在finally代码段中自动清除了Thre...原创 2020-04-08 17:07:33 · 633 阅读 · 0 评论 -
Java架构直通车——分布式限流概述
文章目录分布式限流的几种维度分布式限流方案限流方案常用算法讲解分布式限流的几种维度QPS和连接数控制针对上图中的连接数和QPS(query per second)限流来说,我们可以设定IP维度的限流,也可以设置基于单个服务器的限流。在真实环境中通常会设置多个维度的限流规则,比如设定同一个IP每秒访问频率小于10,连接数小于5,再设定每台机器QPS最高1000,连接数最大保持200。更进一...原创 2020-03-20 16:24:38 · 1047 阅读 · 0 评论 -
Java架构直通车——多数据源下事务最终一致性解决方案
文章目录解决方案一:基于本地消息表上文书说明了强一致性解决方案,这里说下最终一致性:最终一致性是基于BASE的,BASE允许有软状态的存在,允许一段时间内的不一致性,但最终是一致的。下面介绍几种最终一致性的解决方案。解决方案一:基于本地消息表基于本地消息表实现的原理是:将本事务外的操作记录在消息表中。比如说电商网站中,要进行下订单并支付的操作。这里下订单和支付是两个事务,因为支付回跳...原创 2020-03-18 15:11:25 · 1421 阅读 · 0 评论 -
Java架构直通车——多数据源下事务强一致性解决方案
文章目录引入解决方案一:事务补偿机制解决方案二:阶段提交协议解决方案三:使用Mycat或者sharding-jdbc引入在多数据源下,我们事务一致性是很难保障的,比如我们配置了两个数据源,一个交db131,另一个交db132:@Configuration@MapperScan(value = "com.bonjour.learnmutipledatasourceconsistency.da...原创 2020-03-17 18:02:37 · 1701 阅读 · 0 评论 -
Java架构直通车——数据切分
文章目录数据切分垂直切分水平切分总结数据切分数据切分,简单的说,就是通过某种条件,将我们之前存储在一台数据库上的数据,分散到多台数据库中,从而达到降低单台数据库负载的效果。数据切分,根据其切分的规则,大致分为两种类型,垂直切分和水平切分。垂直切分垂直切分就是按照不同的表或者Schema切分到不同的数据库中,比如:在我们的课程中,订单表(order)和商品表(product)在同一个数据库中...原创 2020-03-12 11:33:00 · 486 阅读 · 0 评论 -
Java架构直通车——基于Zookeeper实现分布式锁
文章目录实现原理Zookeeper分布式锁的实现使用curator客户端实现分布式锁实现原理Zookeeper观察器可以监测zookeeper里面某个节点的变化,比如节点创建删除、数据变化等。如果产生变化,可以立即通知到客户端。Zookeeper观察器包含三个方法:getData()获取数据。getChildren()获取子节点。exist()判断当前是否存在。我们在调用这三个方法的时候都可...原创 2020-03-12 11:09:30 · 318 阅读 · 0 评论 -
Java架构直通车——基于Redis的Set NX实现分布式锁
文章目录实现原理基于Redis的Set NX实现分布式锁利用分布式锁解决定时任务重复执行的问题实现原理我们先来看获取redis锁的set命令:SET resource_name random_value NX PX 30000不用想得过于复杂,这里简单解释下上面这个命令:SET resource_name random_value直接可以理解为SET key value,不过这里的...原创 2020-03-11 16:39:43 · 1895 阅读 · 0 评论 -
Java架构直通车——基于数据库for update实现分布式锁
文章目录使用数据库解决超卖问题(非分布式)分为三步:原始方法合并二、三步:使用update行锁使操作下沉到数据库合并一、二、三步:使用方法锁优化:使用块锁使用数据库解决分布式超卖问题使用数据库解决超卖问题(非分布式)解决库存超卖问题,可以另扣库存不在程序中运行,而是通过数据库。向数据库传递库存增量,扣件N个库存,增量为-N。也就是在数据库update语句计算库存,通过update行锁解决并发。...原创 2020-03-10 16:26:40 · 1449 阅读 · 0 评论 -
Java架构直通车——Java中单体应用锁的局限性&分布式锁
文章目录前言单体应用锁的局限性什么是分布式锁目前存在的分布式的方案前言通过之前的并发编程的学习,对JAVA中的锁有了深刻的理解。前面内容中讲到的锁都是有JDK官方提供的锁的解决方案,也就是说这些锁只能在一个JVM进程内有效,我们把这种锁叫做单体应用锁。但是,在互联网高速发展的今天,单体应用锁能够满足我们的需求吗?在互联网系统发展之初,系统比较简单,消耗资源小,用户访问量也比较少,我们只部署一...原创 2020-03-09 14:30:53 · 876 阅读 · 0 评论 -
Java架构直通车——ThreadLocal实现RabbitMQ消息的批量发送
文章目录引入什么是ThreadLocal使用ThreadLocal引入之前,我们完成了单个消息的发送,以及单个消息发送的多线程池化。这里,我们继续完成批量发送消息的封装。因为rabbitMq本身是不支持批量发消息的,所以我们可以直接使用上文所创建的连接池来发送。最简单的代码是这样的:# ProducerClient.class @Override public void se...原创 2020-02-29 11:16:04 · 2052 阅读 · 0 评论 -
Java架构直通车——RabbitMQ池化方案
文章目录引入使用线程池线程池介绍实现消息异步提交的线程池池化RabbitTemplate引入先来看下面一段代码@Autowiredprivate RabbitTemplate rabbitTemplate;private void sendKernel(Message message){ String topic=message.getTopic(); ...原创 2020-02-27 18:14:51 · 1343 阅读 · 0 评论 -
Java架构直通车——MQ 生产端可靠性投递和消费端幂等性保障方案
文章目录什么是生产端的可靠性投递生产端可靠性投递的解决方案:什么是生产端的可靠性投递生产端要做到可靠性投递,需要以下几点:保障消息的成功发出保障MQ节点的成功接收发送端收到MQ节点(Broker)的确认应答完善消息的补偿机制:也就是上面三个步骤失败了的补偿机制。生产端可靠性投递的解决方案:消息落库,对消息状态进行打标在消息发送的时候,把消息持久化到数据库中,然后消息有个...原创 2020-02-24 16:59:08 · 1023 阅读 · 0 评论 -
Java架构直通车——RabbitMQ核心概念和消息流转方式
文章目录RabbitMQ高级消息队列协议 - AMQP协议RabbitMQ消息的流转RabbitMQRabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。各个互联网大厂都在使用RabbitMQ作为消息中间件,为什么呢,下面我们来一起看看,“她” 都有哪些优点!...原创 2020-02-24 15:24:44 · 657 阅读 · 0 评论 -
Java架构直通车——Kafka介绍和高性能原因
文章目录Kafka介绍Kafka高性能原因Kafka集群架构Kafka介绍Kafka以前说过很多次了,包括了Kafka单独的介绍,Kafka与Fabric,这里知识简单说说。Kafka的主要特点就是基于Pull模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志的收集和传输。Kafka0.8版本开始支持复制,不支持事务,并且对消息的重复、丢失、错误没有严格要求(也可以做到严格要求,但...原创 2020-02-23 19:18:01 · 458 阅读 · 0 评论 -
Java架构直通车——RabbitMQ集群架构模式
文章目录RabbitMQ四种架构模式主备模式远程模式镜像模式多活模式RabbitMQ四种架构模式主备模式主备模式也被称为warren(兔子窝),一个主/备方案(主节点挂掉后,从节点提供服务,和ActiveMQ利用Zookeeper做主/备一样,只不过RabbitMQ使用的是HAproxy做的主/备)。主节点提供读写,从节点不提供读写服务,只是负责提供备份服务。主节点宕机后,启用备份节点。...原创 2020-02-21 17:02:44 · 665 阅读 · 0 评论 -
Java架构直通车——MQ应用场景与JMS规范
文章目录应用场景应用场景服务解耦也就是解决服务之间的拆分及其调用,这里主要看服务之间是强依赖还是弱依赖。如果是强依赖,我们采用的是直连的一种方式,比如同步的Dubbo调用,同步的Http、Springcloud调用,或者Jrpc都可以。如果是弱依赖,我们就可以去选用消息中间件,去做消息的解耦。弱依赖不代表着说可以失败,如果说不允许失败,就需要上游的服务去做一个可靠性的投递了,这点以后...原创 2020-02-21 17:02:30 · 740 阅读 · 0 评论