小马哥 vip 中期回顾

Posted by NotGeek on May 29, 2020

小马哥 VPI 中期回顾

TOC

[TOC]

回顾

  • Spring Boot Logger
  • Spring Boot Actuator 联想到 JMX
    • 为生产而准备的特性。
    • JMX, 管控,就是控制它,单机的时候怎么办?集群的时候怎么办?
    • Endpoint/restart
      • JMX restart operation 操作

讨论范畴

  • Spring Boot
  • Spring Framework 设计模式
  • Spring Security

  • Spring Boot 还有命令行的创建方式。

某次事件

  • 解决问题需要有具体的方式。

为什么不用 ftp 把文件下载下来去看呢?


有很多网站上的文章,网上并不是很正确

不患无位,患所以立

Profile

  • Spring Cloud config Service
    • provider 当 Profile 一样的时候,会进行更新配置。

  • 自己多种实现
  • 找到方便的实现
  • 对周围人的接受程度怎么样

Spring Boot 三大特性

  • 自动装配(可以实现)
  • 嵌入式容器(可以实现)
  • 为生产准备(可以相关协议来实现)
  • 干什么
  • 怎么做
  • 怎么应用的更好

安全

  • HealthEndpoint
    • sensitive 不敏感的 false
  • RestartEndpoint
    • sensitive 敏感的 true

前端开始 面向对象

  • 规模扩大,必须统一认知

没有统一的认知,造成代码比较乱

  • 方法和技术如何学习
    • 实施
    • 协调

Spring Framwork

重复的发明轮子

  • Tomcat
    • Embed 版本

Spring

  • EmbeddedServletContainFactory
    • org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedContext
    • org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext

你都可以进行实现不同的 注入。


理解 Filter

PipeLine

1
value -> value -> value

Filter

1
filter -> filter -> filter
1
2
3
4
5
6
HandlerInterceptor handlerInterceptor ;

@Controller
public String index() {
    
}
1
2
3
void begin();
void do();
void after();
  • AfterReturnAdvide

  • MethodBeforeAdvice


设计模式的理解在于

  • 看了多少代码
  • 写了多少代码

Spring Boot 的内置的 Tomcat

有一个 AbstractEmbeddedServletContainerFactory 的入口,

EmbeddedServletContainerFactory

Spring Boot 有几种嵌入式容器,进入了不同的 classPath ,然后进行加载不同的容器,在进入自动装配。里边有一个 条件装配,有一个顺序, Tomcat,Jetty,Undertow

Spring MVC 怎么学习?

@RestController

1
2
3
@RestController
 -  @ResponseBody
 -   @Controller
  • 我们可以通过 MedieType 来指定自描述消息。这样子可以实现一套自定义的自描述消息。

@RequestMapping

  • produces
  • consumeContent-Type 就是我们的 Accept

HttpMessageConverter 可以进行解析。

  • 可以转化来,转化去。

老罗说:

  • 学习不能躺着学
    • 单词不背,是考不上雅思的。。。。

每个程序员都有擅长的地方,不擅长的地方。

  • 诚实
  • 诚信

REST

  • JSP 性能比较好,XML,纯的 HTML,都可以进行支持

  • thymeleaf 可能不是特别的适用于线上,设计起来不是特别好,性能不怎么样

  • 教育能够改变一个人的人生观,财富观,世界观。可能对人的一生造成很大的影响。

  • 评估技术的时候要理性的评估,不要头脑发热

  • Spring Boot 易学难精
    • 问题不容易找到解决的方式,需要自己有经验,社交方式发生了改变。
  • application/html
    • 介质 / 格式 / 限制
Properties 也可以是 XML
  • java.util.Properties#loadFromXML

Spring Cloud

Spring Cloud config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
                          +-------------+         +-------------+
                          | Application |         |   Config    |
                   +----> |      A 1    | ----->  |             |-----+  
                   |      +-------------+         +-------------+     |
                   |                                                  |
+-------------+    |     +-------------+          +-------------+     |        +-------------+
| Application |----+---->| Application |          |   Config    |-----+----->  |     Git     |
|      A      |    |     |      A2     | ----->   |             |     |        |             |
+-------------+    |     +-------------+          +-------------+     |        +-------------+
                   |                                                  |
                   |      +-------------+         +-------------+     |
                   |      | Application |         |   Config    |     |
                   +----> |      A 3    | ----->  |             | ----+
                          +-------------+         +-------------+

config-server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

                                                                         
+-------------+                                 +-------------+              +-------------+
|   config    |----+                            |   Config    |-----+----->  |     Git     |
|   client    |    |                      +-->  |    Server   |     |        |             |
+-------------+    |                      |     +-------------+     |        +-------------+
                   |                      |                         |
                   |                      |                         |                           ....
                   |                      |                         |
+-------------+    |     +-------------+  |      +-------------+    |        +-------------+
|    config   |----+---->| Application |  |      |   Config    |----+----->  |     Git     |
|    client   |    |     |      A2     | -+--->  |   Server    |    |        |             |
+-------------+    |     +-------------+  |      +-------------+    |        +-------------+
                   |                      |                         |
                   |                      |                         |                           ....
                   |                      |                         |
+-------------+    |                      |      +-------------+    |        +-------------+
|    config   |----+                      +----> |   Config    |----+----->  |     Git     |
|    client   |                                  |   Server    |             |             |
+-------------+                                  +-------------+             +-------------+

Apollo

1
2
3
4
5
6
7
8
9
10
11
12
13

+-----------+      +--------+                                              +--------------+
|  config   |----->|  WEB   |                                   +--Push--- |  Web Console |
|  client   |      |        | ----pull---> +-------------+      |          +--------------+ 
+-----------+      +--------+              |   Config    | <----+               
                                           |   Server    |                     
                                           +-------------+                             
                                                |            
                                                |                     +-------------+
                                                +---------------------|     Mysql   |
                                                                      |             |
                                                                      +-------------+

断路保护器

  • 服务端,有保护器

  • 客户端,也需要保护器


Spring Cloud config client

发布订阅模式

  • Observer / ` Observable`

事件监听模式

  • Event / EventListener

我们可以注册事件监听器,然后

我们可以发布事件,进行响应。

我们的

  • ConfigFileApplicationListener 配置服务器监听事件
    • 我们可以配置很多个应用,意味着,我们可以有多个服务

META-INF/spring.factories

1
2
3
4
ApplicationListener=\
xxxListener,\
XXXListener
\xxx
  • BootstrapApplicationListener
  • 优先于 ConfigFileApplicationListener 进行加载

EnvironmentEndpoint

  • 关联多个 带名称的 PropertySource

MutablePropertySources

关联然后进行修改。

Eureka

  • XML RPC
  • WebService -> SOAP
  • REST -> JSON/XML

高可用架构

  • URI
  • URL
  • Nginx
  • xxx

Eureka 客户端

Eureka 服务端

  • 自我注册
    • 快速失败
    • 容错
高可用
  • Eureka 客户端的高可用
    • 多个服务端
    • 还可以替换掉 健康检查的端口
  • 服务端高可用
    • 相互注册

Ribbon

  • IRule
    • 各种规则

需要从整体的去把控,看到整个系统的全貌。

  • 随机分配可能不太确定,所以还是轮询更加稳定一点。

Hystrix

整合 Turbine

  • 聚合 Hystrix
    • 把相同的应用的状态给集中起来。
    • 配置集群的配置

Spring Cloud Demo ,不太完整。

1
2
3
4
5
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-boot-starter-turbine</artifactId>
</dependency>
1
2
3
4
5
# 服务端口
sever.port=8080

# server port
management.port=8081

问答

  1. Ribbon 是用来做什么,只能做负载均衡吗?

    答:主要用户客户端均衡

  2. Kafka 与 Active MQ

    答:

    • Active MQ 相对完善,

    • Kafka 在能力上比较灵活放弃不少约束,性能相对较好

  3. Java 基础的提高书籍

    答:《Java 编程思想》、 《Effect Java》………

  4. {@link} ??

    答:Java Doc 一部分,

    • {@link xxx} 引用到某个类
    • @since 开始版本
    • @version 当前版本
    • @author 作者
    • <code></code> 嵌入代码
  5. Spring cloud config 配置,获取到 git 中的 properties 文件属性(my.name) 嵌套在 Spring xml 中使用

    答:利用注解 @ImportResource("abc.xml")

    abc.xml

    1
    2
    3
    
    <bean id="person" class="com.darian.Person">
        <property name="name" value="${my.name}"/>
    </bean>
    

    启动类 Main.java

    1
    2
    3
    4
    5
    6
    7
    8
    
    @ImportReource("abc.xml")
    @SpringBootApplication
    public class MainApplication {
       
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class, args);
        }
    }
    
  6. 将实时数据放在 Redis,Stom 去消费号码?

    答:Stom 对数据持久好一点,Redis 比 DB 逊色一点。

  7. new SpringApplicationBuilder().sources(Appconfig.class) 方式启动,AppliConfig 和配置文件哪个先加载?

    答:

    • Appconfig 是一个 @Configuration 的 class,配置文件是一个外部资源,不会相互影响,
      • 如果 Appconfig 配置了 @PropertySource 或者 @PropertySources 的话,会优先加载 @PropertySource 中的配置资源。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    @PropertySources(
        {
            @PropertySource(value = "config.properties",
                            encoding = "UTF-8"),
            @PropertySource(value = "config-3.config",
                            encoding = "GBK")
        }
    )
    @SpringBootApplication
    public class Java9CoreApplication {
        //..........
        ////
    

    Java 8 以后支持了 @Repeatable 可以同时标记多个。

人的依赖性不太好,要自己多多思考问题,再去和别人讨论。