![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring Cloud
哈喽沃德先生
「哈喽沃德先生」公众号作者
个人网站:mrhelloworld.com
展开
-
Spring Cloud 系列之 ZooKeeper 注册中心
什么是注册中心服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是微服务架构中最基础的设施之一。注册中心可以说是微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。简单理解就是:在没有注册中心时候,服务间调用需要知道被当服务调方的具体地址(写死的 ip:port)。更换部署地址,就不得不修改调用当中指定的地址。而有原创 2020-08-06 09:19:11 · 489 阅读 · 0 评论 -
Spring Cloud 系列之 Dubbo RPC 通信
Dubbo 介绍官网:http://dubbo.apache.org/zh-cn/Github:https://github.com/apache/dubbo2018 年 2 月 15 日,阿里巴巴的服务治理框架 dubbo 通过投票,顺利成为 Apache 基金会孵化项目。Apache Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo 架构Dubbo 提供三个核心功能:原创 2020-06-17 10:08:53 · 594 阅读 · 0 评论 -
Spring Cloud 系列之 Alibaba Nacos 配置中心
Nacos 介绍Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。英文全称 Dynamic Naming and Configuration Service,Na 为 Naming/NameServer 即注册中心,co 为 Configuration 即配置中心,Service 是指该注册/配置中心都是以服务为核心。服务(Service)是 Nacos 世界的一等公民。官网是这样说的:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。原创 2020-06-16 13:15:19 · 834 阅读 · 0 评论 -
双剑合璧 Nacos 结合 Sentinel 实现流量安全控制
Alibaba Sentinel 是一款高性能且轻量级的流量控制、熔断降级解决方案。是面向分布式服务架构的高可用流量控制组件。Sentinel 官网:https://sentinelguard.io/zh-cn/Github:https://github.com/alibaba/SentinelSentinel 是什么随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来保障微服务的稳定性。Sentin.原创 2020-06-12 09:12:07 · 3950 阅读 · 0 评论 -
Spring Cloud 系列之 Alibaba Nacos 注册中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Alibaba Nacos 注册中心(一)本篇文章讲解 Nacos 注册中心集群环境搭建。Nacos 集群环境搭建集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPMjALtb-1591846557404)(https://mrhelloworld.com/resources/articles/spri原创 2020-06-11 11:38:15 · 644 阅读 · 1 评论 -
Spring Cloud 系列之 Alibaba Nacos 注册中心(一)
前言从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件。Spring Cloud Alibaba 介绍Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件原创 2020-06-10 10:59:58 · 1117 阅读 · 0 评论 -
Spring Cloud 系列之 Apollo 配置中心(四)
本篇文章为系列文章,未读前几集的同学请猛戳这里:Spring Cloud 系列之 Apollo 配置中心(一)Spring Cloud 系列之 Apollo 配置中心(二)Spring Cloud 系列之 Apollo 配置中心(三)本篇文章讲解 Apollo 高可用环境搭建,灰度发布,教大家搭建企业中真实环境的配置中心。高可用环境搭建点击链接观看:Apollo 高可用环境搭建视频(获取更多请关注公众号「哈喽沃德先生」)分析数据库高可用方案很多,比如双主结构、主从结构、异地备原创 2020-06-05 10:09:01 · 825 阅读 · 0 评论 -
Spring Cloud 系列之 Apollo 配置中心(三)
本篇文章为系列文章,未读前几集的同学请猛戳这里:Spring Cloud 系列之 Apollo 配置中心(一)Spring Cloud 系列之 Apollo 配置中心(二)本篇文章讲解 Apollo 多环境部署方案,教大家搭建除了 DEV 的其他环境。多环境部署方案点击链接观看:Apollo 多环境部署说明视频(获取更多请关注公众号「哈喽沃德先生」)为了让大家有更真实的感受,多环境部署方案我们在 Linux 环境下搭建,不再使用 Quick Start 脚本。当项目要上线部署到生产环原创 2020-06-04 11:35:46 · 582 阅读 · 0 评论 -
Spring Cloud 系列之 Apollo 配置中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:微服务系列之Apollo配置中心(一)本篇文章讲解 Apollo 部门管理、用户管理、配置管理、集群管理。点击链接观看:Apollo 部门管理、用户管理、配置管理、集群管理视频(获取更多请关注公众号「哈喽沃德先生」)部门及用户管理接下来我们深入学习一下 Apollo 控制台的使用,刚才我们是通过样例部门和 Apollo 用户来操作的,可以自定义部门和用户吗?答案当然是可以的。下面我们就讲一下如何自定义部门和用户,如何给项目指定用户并分配权限以及删原创 2020-06-03 15:26:50 · 575 阅读 · 0 评论 -
Spring Cloud 系列之 Apollo 配置中心(一)
背景随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址等等。对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制等等。在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。Apollo 配置中心应运而生!Apollo - 一个可靠的配置管理系统。Apollo 介绍Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配原创 2020-06-02 11:26:57 · 666 阅读 · 0 评论 -
Spring Cloud 系列之 Consul 配置中心
前面我们已经学习过 Spring Cloud Config 了:Spring Cloud 系列之 Consul 配置中心(一)Spring Cloud 系列之 Consul 配置中心(二)Spring Cloud 系列之 Consul 配置中心(三)它提供了配置中心的功能,但是需要配合 git、svn 或外部存储(例如各种数据库),且需要配合 Spring Cloud Bus 《微服务系列之Bus消息总线》实现配置刷新。前面的课程中我们也学习了 Spring Cloud Consul,当时讲解原创 2020-05-18 14:11:42 · 653 阅读 · 0 评论 -
Spring Cloud 系列之 Bus 消息总线
什么是消息总线消息代理中间件构建一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有微服务实例监听和消费。消息代理又是什么?消息代理是一个消息验证、传输、路由的架构模式,主要用来实现接收和分发消息,并根据设定好的消息处理流来转发给正确的应用。它在微服务之间起到通信调度作用,减少了服务之间的依赖。什么是 Spring Cloud BusSpring Cloud Bus 是 Spring Cloud 体系内的消息总线,用来连接分布式系统的所有节点。Spring Cloud原创 2020-05-14 08:59:34 · 622 阅读 · 0 评论 -
Spring Cloud 系列之 Config 配置中心(三)
本篇文章为系列文章,未读前几集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一)Spring Cloud 系列之 Config 配置中心(二)本篇文章讲解 Config 如何实现配置中心加解密,配置中心用户安全认证。配置中心加解密考虑这样一个问题:所有的配置文件都存储在 Git 远程仓库,配置文件中的一些信息又是比较敏感的。所以,我们需要对这些敏感信息进行加密处理。主要的加密方法分为两种:一种是共享密钥加密(对称密钥加密),一种是公开密钥加密(非对称密钥加密)原创 2020-05-13 11:36:38 · 369 阅读 · 0 评论 -
Spring Cloud 系列之 Config 配置中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一)本篇文章讲解 Config 如何实现配置中心自动刷新。配置中心自动刷新点击链接观看:配置中心自动刷新视频(获取更多请关注公众号「哈喽沃德先生」)Spring Cloud Config 在项目启动时才会加载配置内容这一机制,导致了它存在一个缺陷,修改配置文件内容后,不会自动刷新。例如我们之前的项目,当服务已经启动的时候,修改 Github 上的配置文件内容,这时候,再次刷新页面,对不起,还原创 2020-05-12 09:19:20 · 321 阅读 · 0 评论 -
Spring Cloud 系列之 Config 配置中心(一)
服务配置现状配置文件是我们再熟悉不过的,在微服务系统中,每个微服务不仅仅只有代码,还需要连接其他资源,例如数据库的配置或功能性的开关 MySQL、Redis 、Security 等相关的配置。除了项目运行的基础配置之外,还有一些配置是与我们业务有关系的,比如说七牛存储、短信和邮件相关,或者一些业务上的开关。但是随着微服务系统的不断迭代,整个微服务系统可能会成为一个网状结构,这个时候就要考虑整个微服务系统的扩展性、伸缩性、耦合性等等。其中一个很重要的环节就是配置管理的问题。常规配置管理解决方案缺点原创 2020-05-11 09:13:00 · 356 阅读 · 0 评论 -
Spring Cloud 系列之 Stream 消息驱动(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Stream 消息驱动(一)本篇文章讲解 Stream 如何实现消息分组和消息分区。消息分组点击链接观看:Stream 消息分组视频(获取更多请关注公众号「哈喽沃德先生」)如果有多个消息消费者,那么消息生产者发送的消息会被多个消费者都接收到,这种情况在某些实际场景下是有很大问题的,比如在如下场景中,订单...原创 2020-05-01 17:43:04 · 300 阅读 · 0 评论 -
Spring Cloud 系列之 Stream 消息驱动(一)
在实际开发过程中,服务与服务之间通信经常会使用到消息中间件,消息中间件解决了应用解耦、异步处理、流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。不同中间件内部实现方式是不一样的,这些中间件的差异性导致我们实际项目开发给我们造成了一定的困扰,比如项目中间件为 Kafka,如果我们要替换为 RabbitMQ,这无疑就是一个灾难性的工作,一大堆东西都要重做,因为它跟我们系统的耦合性非常高。...原创 2020-04-30 09:48:45 · 1116 阅读 · 0 评论 -
Spring Cloud 系列之 Sleuth 链路追踪(三)
本篇文章为系列文章,未读前几集的同学请猛戳这里:Spring Cloud 系列之 Sleuth 链路追踪(一)Spring Cloud 系列之 Sleuth 链路追踪(二)本篇文章讲解 Sleuth 如何使用 Elasticsearch、Logstash、Kibana 分析追踪数据。使用 ELK 分析追踪数据点击链接观看:ELK 环境准备视频(获取更多请关注公众号「哈喽沃德先生」...原创 2020-04-29 09:42:30 · 363 阅读 · 0 评论 -
Spring Cloud 系列之 Sleuth 链路追踪(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Sleuth 链路追踪(一)本篇文章讲解 Sleuth 基于 Zipkin 存储链路追踪数据至 MySQL,Elasticsearch 以及使用 MQ 存储链路追踪数据至 MySQL,Elasticsearch。存储追踪数据Zipkin Server 默认存储追踪数据至内存中,这种方式并不适合生产环境,一旦...原创 2020-04-28 10:00:04 · 309 阅读 · 0 评论 -
Spring Cloud 系列之 Sleuth 链路追踪(一)
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个...原创 2020-04-27 09:13:11 · 703 阅读 · 0 评论 -
Spring Cloud 系列之 Gateway 服务网关(四)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一)Spring Cloud 系列之 Gateway 服务网关(二)Spring Cloud 系列之 Gateway 服务网关(三)本篇文章讲解 Gateway 网关如何实现限流、整合 Sentinel 实现限流以及高可用网关环境搭建。网关限流顾名思义,限流就是限制流量,...原创 2020-04-23 11:00:14 · 2009 阅读 · 0 评论 -
Spring Cloud 系列之 Gateway 服务网关(三)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一)Spring Cloud 系列之 Gateway 服务网关(二)本篇文章讲解 Gateway 网关过滤器和全局过滤器以及自定义过滤器。过滤器Spring Cloud Gateway 根据作用范围划分为 GatewayFilter 和 GlobalFilter,二者区别如...原创 2020-04-22 14:41:56 · 477 阅读 · 0 评论 -
Spring Cloud 系列之 Gateway 服务网关(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一)本篇文章讲解 Gateway 网关的多种路由规则、动态路由规则(配合服务发现的路由规则)。路由规则点击链接观看:路由规则(获取更多请关注公众号「哈喽沃德先生」)Spring Cloud Gateway 创建 Route 对象时, 使用 RoutePredicateFacto...原创 2020-04-21 10:45:45 · 493 阅读 · 0 评论 -
Spring Cloud 系列之 Gateway 服务网关(一)
什么是 Spring Cloud GatewaySpring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且还基于 Filter 链的方式提供了网关基本的功能。目前最新版 Spring Cloud 中引用的还是 Zuul 1.x 版本,而这个版本是基于过滤器的,是阻塞 IO,不支持长连接。Z...原创 2020-04-20 10:26:10 · 986 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Zuul 服务网关(四)
本篇文章为系列文章,未读前几集的同学请猛戳这里:Spring Cloud 系列之 Netflix Zuul 服务网关(一)Spring Cloud 系列之 Netflix Zuul 服务网关(二)Spring Cloud 系列之 Netflix Zuul 服务网关(三)本篇文章讲解 Zuul 和 Sentinel 整合,实现网关限流和容错以及高可用网关环境搭建。Zuul 和 Sen...原创 2020-04-17 14:59:16 · 253 阅读 · 2 评论 -
Spring Cloud 系列之 Netflix Zuul 服务网关(三)
本篇文章为系列文章,未读前几集的同学请猛戳这里:Spring Cloud 系列之 Netflix Zuul 服务网关(一)Spring Cloud 系列之 Netflix Zuul 服务网关(二)本篇文章讲解 Zuul 和 Hystrix 的无缝结合,实现网关监控、网关熔断、网关限流、网关调优。Zuul 和 Hystrix 无缝结合在 Spring Cloud 中,Zuul 启动...原创 2020-04-17 14:57:34 · 330 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Zuul 服务网关(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Netflix Zuul 服务网关(一)本篇文章讲解 Zuul 网关过滤器实现统一鉴权以及网关过滤器异常统一处理。网关过滤器点击链接观看:网关过滤器视频(获取更多请关注公众号「哈喽沃德先生」)Zuul 包含了对请求的路由和过滤两个核心功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部...原创 2020-04-17 14:55:49 · 294 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Zuul 服务网关(一)
什么是 ZuulZuul 是从设备和网站到应用程序后端的所有请求的前门。作为边缘服务应用程序,Zuul 旨在实现动态路由,监视,弹性和安全性。Zuul 包含了对请求的路由和过滤两个最主要的功能。Zuul 是 Netflix 开源的微服务网关,它可以和 Eureka、Ribbon、Hystrix 等组件配合使用。Zuul 的核心是一系列的过滤器,这些过滤器可以完成以下功能:身份认证与安...原创 2020-04-17 14:54:24 · 430 阅读 · 0 评论 -
Spring Cloud 系列之 Alibaba Sentinel 服务哨兵
前文中我们提到 Netflix 中多项开源产品已进入维护阶段,不再开发新的版本,就目前来看是没有什么问题的。但是从长远角度出发,我们还是需要考虑是否有可替代产品使用。比如本文中要介绍的 Alibaba Sentinel 就是一款高性能且轻量级的流量控制、熔断降级可替换方案。Sentinel 官网:https://github.com/alibaba/SentinelHystrix 目前状态...原创 2020-04-17 14:52:45 · 302 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Hystrix 服务监控
ActuatorHystrix 除了可以实现服务容错之外,还提供了近乎实时的监控功能,将服务执行结果和运行指标,请求数量成功数量等等这些状态通过 Actuator 进行收集,然后访问 /actuator/hystrix.stream 即可看到实时的监控数据。添加依赖在需要开启数据监控的项目中添加 actuator 依赖。<!-- spring boot actuator 依赖 ...原创 2020-04-17 14:50:51 · 310 阅读 · 2 评论 -
Spring Cloud 系列之 Netflix Hystrix 服务容错(三)
本篇文章为系列文章,未读前几集的同学请猛戳这里:Spring Cloud 系列之 Netflix Hystrix 服务容错(一)Spring Cloud 系列之 Netflix Hystrix 服务容错(二)本篇文章讲解 Hystrix 的服务熔断和服务降级以及基于 Feign 的服务熔断处理。服务熔断点击链接观看:服务熔断视频(获取更多请关注公众号「哈喽沃德先生」)服务熔断...原创 2020-04-17 14:48:14 · 271 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Hystrix 服务容错(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Netflix Hystrix 服务容错(一)本篇文章讲解 Hystrix 服务隔离中的线程池隔离与信号量隔离。服务隔离点击链接观看:服务隔离视频(获取更多请关注公众号「哈喽沃德先生」)线程池隔离没有线程池隔离的项目所有接口都运行在一个 ThreadPool 中,当某一个接口压力过大或者出现故障时,...原创 2020-04-17 14:46:10 · 242 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Hystrix 服务容错(一)
什么是 HystrixHystrix 源自 Netflix 团队于 2011 年开始研发。2012年 Hystrix 不断发展和成熟,Netflix 内部的许多团队都采用了它。如今,每天在 Netflix 上通过 Hystrix 执行数百亿个线程隔离和数千亿个信号量隔离的调用。极大地提高了系统的稳定性。在分布式环境中,不可避免地会有许多服务依赖项中的某些服务失败而导致雪崩效应。Hystri...原创 2020-04-17 14:44:35 · 249 阅读 · 0 评论 -
Spring Cloud 系列之 Feign 声明式服务调用(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Feign 声明式服务调用(一)本篇文章讲解 Feign 性能优化的问题,Gzip压缩、HTTP连接池、请求超时等。Feign 性能优化Gzip 压缩gzip 介绍:gzip 是一种数据格式,采用 deflate 算法压缩数据;gzip 是一种流行的文件压缩算法,应用十分广泛,尤其是在 Linux 平台...原创 2020-04-17 14:43:10 · 443 阅读 · 0 评论 -
Spring Cloud 系列之 Feign 声明式服务调用(一)
什么是 FeignFeign 是 Spring Cloud Netflix 组件中的一个轻量级 RESTful 的 HTTP 服务客户端,实现了负载均衡和 Rest 调用的开源框架,封装了 Ribbon 和 RestTemplate,实现了 WebService 的面向接口编程,进一步降低了项目的耦合度。Feign 内置了 Ribbon,用来做客户端负载均衡调用服务注册中心的服务。Feig...原创 2020-04-17 14:41:43 · 258 阅读 · 0 评论 -
Spring Cloud 系列之 Consul 注册中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Consul 注册中心(一)本篇文章讲解 Consul 集群环境的搭建。Consul 集群点击链接观看:Consul 集群视频(获取更多请关注公众号「哈喽沃德先生」)上图是一个简单的 Consul Cluster 架构,Consul Cluster 有 Server 和 Client 两种角色。不管是...原创 2020-04-17 14:40:35 · 191 阅读 · 0 评论 -
Spring Cloud 系列之 Consul 注册中心(一)
Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,并且官方也在积极维护 1.X https://github.com/Netflix/eureka/releases。The existing open source work on ...原创 2020-04-17 14:37:45 · 454 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Ribbon 负载均衡
什么是 RibbonRibbon 是一个基于 HTTP 和 TCP 的 客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。它不像 Spring Cloud 服务注册中心、配置中心、API 网关那样独立部署,但是它几乎存在于每个 Spring Cloud 微服务中。包括 Feign 提供的声明式服务调用也是基于该 Ribbon 实现的。Ribbon 默认提供很多种负载均衡算...原创 2020-04-17 14:34:32 · 643 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Eureka 注册中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Netflix Eureka 注册中心(一)本篇文章讲解 Eureka 集群、架构原理、自我保护、优雅停服、安全认证等功能实现。高可用 Eureka 注册中心点击链接观看:高可用 Eureka 注册中心视频(获取更多请关注公众号「哈喽沃德先生」)注册中心 eureka-server创建项目在 S...原创 2020-04-17 14:32:54 · 316 阅读 · 0 评论 -
Spring Cloud 系列之 Netflix Eureka 注册中心(一)
服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是微服务架构中最基础的设施之一。在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中。Dubbo 是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用,它提供了比较完善的服务治理功能,而服务治理的实现主要依靠的就是注册中心。什么是注...原创 2020-04-17 14:28:53 · 909 阅读 · 0 评论