javaSpringCloud我是程序员

springBoot+springCloud学习笔记

2017-09-17  本文已影响2802人  kevin688

SpringBoot

配置优先级

监控功能

SpringCloud

Eureka注册服务中心 三个重要的角色:服务注册中心、服务提供者、服务消费者。

#指定端口号
server.port=1111
#是否优先使用IP地址作为主机名的标识  默认为false
eureka.instance.preferIpAddress=true
#是否注册到eureka
eureka.client.register-with-eureka=false
#是否从eureka获取注册信息
eureka.client.fetch-registry=false
#eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值)
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
#application-peer1.properties
spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/

#application-peer2.properties
spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/
spring.application.name=hello-service
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
server.port=8082[8081]
@Bean
@LoadBalanced
RestTemplate restTemplate() {
    return RestTemplateMgr.getInstance().init().getTemplate();
}
#发送心跳个server的频率  默认30秒
eureka.instance.lease-renewal-interval-in-seconds=30
#两个心跳之间的时间间隔  超过则将服务摘除。 默认90秒
eureka.instance.lease-expiration-duration-in-seconds=90
# 单机调试的时候 可以关闭保护机制
eureka.server.enable-self-preservation=false

springCloud Ribbon 客户端负载均衡

  1. 多个服务提供者,注册到服务中心
  2. 服务消费者通过调用被@LoadBalanced注解修饰过的restTemplate
  1. RestTemplate 基本使用 GET POST PUT DELETE
  2. RestTemplate 与 Ribbon 整合
  3. 重点源码:LoadBalancerClient LoadBalancerAutoConfiguration

springCloud Hystrix 服务容错保护

#程序启动的地方
@EnableCircuitBreaker 
#具体需要断路器的服务方法上
@HystrixCommand(fallbackMethod = "helloFallback", commandKey = "helloKey")
#断路器被触发熔断的回调方法
public String helloFallback() {}

springCloud Feign 声明是服务调用

springCloud Zuul API网关服务

#在pom.xml引入spring-cloud-starter-zuul
#在application.properties配置
spring.application.name=api-gateway
server.port=5555
#在启动类使用@EnableZuulProxy
  1. 请求转发,即路由的功能;与服务治理框架结合,实现自动化的服务实例维护以及负载均衡的路由转发。
  2. 请求过滤,即可以当做是权限验证。权限校验与微服务业务逻辑解耦。
  3. 它作为系统的统一入口,屏蔽了系统内部各个服务的细节。
zuul.routes.api-a-url.path=/api-a-url/**
zuul.routes.api-a-url.url=http://localhost:8001/
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=hello-service

zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.serviceId=hello-service

zuul.routes.api-c.path=/ddd/**
zuul.routes.api-c.serviceId=hello-service

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
zuul.routes.api-d.path=/ddd/**
zuul.routes.api-d.serviceId=hello
ribbon.eureka.enabled=false
hello.ribbon.listOfServers=http://localhost:8001/,http://localhost:8002/
#通过设置全局参数为空来覆盖默认值
zuul.senstitiveHeaders=
#通过制定路由的参数来配置  有如下两种配置
zuul.routes.<router>.customSensitiveHeaders=true
zuul.routes.<router>.senstiveHeaders=
zuul.addHostHeader=true

SpringCloud 的 Brixton会有重定向问题 Camden Dalston 则没有

#

springCloud Sleuth 分布式服务跟踪

  1. 添加pom.xml的依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
  1. 启动eureka服务
  2. 访问 查看日志 分析日志即可看出链路调用的规则。 [trace-1,7cbdce82c9447510,7667724d864b3ec,false]
trace-1:应用名称  即application.properties中的spring.application.name的值
7cbdce82c9447510:springCloud Sleuth生成的一个ID  称为TraceID 用来标识一条请求链路
7667724d864b3ec:springCloud Sleuth生成的另外一个ID  称为SpanID 表示一个基本的工作单元 比如发送一个HTTP请求。
false:代表该信息是否要被后续的跟踪信息收集器获取和存储。

一条请求链路中  只能包含一个TraceID 可以有多SpanID
  1. 服务跟踪的实现原理
1.服务框架为每个请求创建唯一的跟踪标识。 一般是在httpHeader里标识
2.统计各个处理单元的时间耗时。 下一个单元开始 上一个单元结束。
3.源码跟踪:org.springframework.cloud.sleuth.Span
public static final String SAMPLED_NAME = "X-B3-Sampled";
public static final String PROCESS_ID_NAME = "X-Process-Id";
public static final String PARENT_ID_NAME = "X-B3-ParentSpanId";
public static final String TRACE_ID_NAME = "X-B3-TraceId";
public static final String SPAN_NAME_NAME = "X-Span-Name";
public static final String SPAN_ID_NAME = "X-B3-SpanId";
public static final String SPAN_EXPORT_NAME = "X-Span-Export";
1. 通过Sampler接口实现  默认使用PercentageBasedSampler
    @Bean
    public AlwaysSampler defaultSampler() {
        return new AlwaysSampler();
    }
2. 通过配置文件配置
spring.sleuth.sampler.percentage=0.1  #代表获取10%的样例  1代表100%
  1. ELK平台 ElasticSearch/Logstash/Kibana这三个工具。
  2. 配置logstash对JSON格式日志的支持
  1. 四大核心组件:
1. Collector:收集器组件,主要处理从外部系统发送过来的信息,将这些信息转换成Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。
2. Storage:存储组件,主要处理收集器收到的信息,默认会将这些信息存储在内存中。可以修改存储的策略,通过使用其他存储组件,将跟踪信息存储到数据库中。
3. Restful API:API组件,童工外部访问接口。
4. WEB UI:UI组件,基于API组件实现的上层应用。方便用户查询、分析跟踪信息。
  1. Sleuth与Zipkin整合 HTTP方式。
1. 搭建ZipKinServer 服务
    <dependencies>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>
    </dependencies>
2. 为应用引入和配置ZipKin服务
    spring.zipkin.base-url=http://localhost:9411
  1. Sleuth与Zipkin整合 消息中间件收集
1. 为具体应用添加pom依赖:
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-stream</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
2. 配置rabbitmq服务:
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=springcloud
    spring.rabbitmq.password=123456
3. 修改zipkin-server的pom依赖:
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
    </dependency>

springboot + elasticsearch全文检索

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields

Elasticsearch集群可以包含多个索引(indices)(数据库) ,每一个索引可以包含多个类型(types)(表) ,每一个类型包含多个文档(documents)(行) ,然后每个文档包含多个字段(Fields)(列) 。

自动配置类

org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchProperties

框架整合

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>
<!-- 添加 spring-data-elasticsearch的依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

<dependency>
    <groupId>com.sun.jna</groupId>
    <artifactId>jna</artifactId>
    <version>3.0.9</version>
</dependency>
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.properties.path.logs=./elasticsearch/logs
spring.data.elasticsearch.properties.path.data=./elasticsearch/data

#独立服务或者是es集群的时候打开配置 cluster-name 必须与es配置的name一致
#spring.data.elasticsearch.cluster-name: #默认为elasticsearch
#spring.data.elasticsearch.cluster-nodes: IP:port #配置es节点信息,多个用逗号分隔
  1. @Document
@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Document {

    String indexName();//索引库的名称,一般用项目的名称命名

    String type() default "";////类型,一般用实体的名称命名

    boolean useServerConfiguration() default false;

    short shards() default 5;//默认分区数

    short replicas() default 1;//每个分区默认的备份数

    String refreshInterval() default "1s";//刷新间隔

    String indexStoreType() default "fs";//索引文件存储类型

    boolean createIndex() default true;
}
  1. @Field
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface Field {

    FieldType type() default FieldType.Auto;//自动检测属性的类型

    FieldIndex index() default FieldIndex.analyzed;//默认情况下分词

    DateFormat format() default DateFormat.none;

    String pattern() default "";

    boolean store() default false;//默认情况下不存储原文

    String searchAnalyzer() default "";//指定字段搜索时使用的分词器

    String analyzer() default "";//指定字段建立索引时指定的分词器

    String[] ignoreFields() default {};//指定需要忽略的字段

    boolean includeInParent() default false;
}

springCloud 与 springBoot问题汇总

上一篇 下一篇

猜你喜欢

热点阅读