#指定端口号 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
#程序启动的地方 @EnableCircuitBreaker #具体须要断路器的服务方法上 @HystrixCommand(fallbackMethod = "helloFallback", commandKey = "helloKey") #断路器被触发熔断的回调方法 public String helloFallback() {}
#在pom.xml引入spring-cloud-starter-zuul #在application.properties配置 spring.application.name=api-gateway server.port=5555 #在启动类使用@EnableZuulProxy
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 则没有javascript
#
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
trace-1:应用名称 即application.properties中的spring.application.name的值 7cbdce82c9447510:springCloud Sleuth生成的一个ID 称为TraceID 用来标识一条请求链路 7667724d864b3ec:springCloud Sleuth生成的另一个ID 称为SpanID 表示一个基本的工做单元 好比发送一个HTTP请求。 false:表明该信息是否要被后续的跟踪信息收集器获取和存储。 一条请求链路中 只能包含一个TraceID 能够有多SpanID
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. Collector:收集器组件,主要处理从外部系统发送过来的信息,将这些信息转换成Zipkin内部处理的Span格式,以支持后续的存储、分析、展现等功能。 2. Storage:存储组件,主要处理收集器收到的信息,默认会将这些信息存储在内存中。能够修改存储的策略,经过使用其余存储组件,将跟踪信息存储到数据库中。 3. Restful API:API组件,童工外部访问接口。 4. WEB UI:UI组件,基于API组件实现的上层应用。方便用户查询、分析跟踪信息。
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. 为具体应用添加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>
Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch集群能够包含多个索引(indices)(数据库) ,每个索引能够包含多个类型(types)(表) ,每个类型包含多个文档(documents)(行) ,而后每一个文档包含多个字段(Fields)(列) 。css
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节点信息,多个用逗号分隔
@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; }
@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; }