SpringCloud框架学习总结

SpringCloud框架学习总结

技术点:
1.Maven父子项目。
2.服务注册中心EurekaServer。
3.数据微服务注册
4.视图服务注册
5.微服务之间的彼此调用-----sleuth 服务链路追踪。
6.微服务间共享配置信息-----配置服务 Config Server。
7.配置客户端----productviewservicefeign
8.配置信息在多个微服务之间自动更新------RabbitMQ 总线 Bus。
9.数据微服务集群都不能使用了, 视图微服务处理方式------断路器 Hystrix。
10.断路器的开启与关闭时机------断路器监控Hystrix Dashboard。
11.集群聚合监控------断路器聚合监控 Turbine Hystrix Dashboard。
12.如何不暴露微服务名称,并提供服务------Zuul网关。

1.Maven父子项目的创建

在基础创建Maven项目的基础上
在这里插入图片描述

图1
然后像创建普通Maven项目的过程创建子项目即可(此时Maven中的子项目将继承父项目的依赖 )

2.服务注册中心EurekaServer

EurekaServer服务本身是SpringBoot项目,该服务分为三个部分

1.pom.xml增加spring-cloud-starter-netflix-eureka-server jar包

2.EurekaServer启动类EurekaServerApplication.java

作为SpringBoot项目的启动类,EnrekaServer需要==@SpringBootApplication==。再者,它扮演的角色是注册中心,所以它需要==@EnableEurekaServer==
注:NetUtil.isUsableLocalPort(port)检查端口是否已经被占用
SpringApplication.run(Application.class, args);不涉及端口的启动SpringBoot项目
new SpringApplicationBuilder(EurekaServerApplication.class).properties(“server.port=” +
port).run(args); SpringBoot项目指定启动端口启动方式。

3.application.yml

EnrekaServer配置文件,提供 eureka 的相关信息
eureka.instance.hostname: localhost (主机名称为localhost)
eureka.client.registerWithEureka: false(是否注册到服务器。false表示不需要)
eureka.client.fetchRegistry: false (是否获取服务器的注册信息。false表示不需要)
eureka.client.serviceUrl.defaultZone: http:// e u r e k a . i n s t a n c e . h o s t n a m e : {eureka.instance.hostname}: eureka.instance.hostname:{server.port}/eureka/
(自己作为服务器,公布出来的地址。比如后续某个微服务要把自己注册到 eureka server, 那么就要使用这个地址: http://localhost:8761/eureka/)
spring.application.name: eureka-server(该微服务名称是 eureka-server )
注:http://127.0.0.1:8761/(该注册中心界面)

3.数据微服务注册

数据微服务为SpringBoot项目。该服务分为6个部分:

1.pom.xml

增加:
1.spring-cloud-starter-netflix-eureka-client 表示这是个 eureka 客户端。
2.spring-boot-starter-web: 表示这是个web服务,会提供控制层

2.实体类(基础类,不做介绍)

3.服务类

在这里插入图片描述

图2

4.控制类

在这里插入图片描述

图3
注:使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。若要返回json等内容到页面,则需要在方法上加@ResponseBody注解(在作用域限制符后+)。 @RestController注解相当于@ResponseBody + @Controller

5.ProductDataServiceApplication启动类

注解:@SpringBootApplication
@EnableEurekaClient
new SpringApplicationBuilder(ProductDataServiceApplication.class).properties(" server.port=" + port).run(args);
注:NumberUtil.isInteger(strPort);判断strPort是否是数字
Convert.toInt(strPort);返回Future future
future.get(5,TimeUnit.SECONDS);返回int port,这里指的是端口号

6.application.yml

spring.application.name: product-data-service(该微服务名称是 product-data-service)
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/(设置注册中心地址,表示将该服务在EurekaServer中进行注册 )

4.视图服务注册

视图微服务为SpringBoot项目。由于视图服务需要访问数据服务。SpringCloud在这方面提供了RibbonFeign两种方式,( Feign 是对 Ribbon的封装,调用起来更简单)。
Ribbon方式
该服务分为7个部分:

1.pom.xml

spring-cloud-starter-netflix-eureka-client(eureka 客户端)
spring-boot-starter-web(springmvc)
spring-boot-starter-thymeleaf(thymeleaf 做服务端渲染)

2.实体类(基础类,不做介绍)

3. Ribbon 客户端

在这里插入图片描述

图4

4.服务类

在这里插入图片描述

图5

5. 控制器

在这里插入图片描述

图6

6.启动类ProductViewServiceRibbonApplication

注解:
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
(与ProductDataServiceApplication启动类相比较,ProductViewServiceRibbonApplication多了
注解多了个 @EnableDiscoveryClient, 表示用于发现eureka 注册中心的微服务。)

new SpringApplicationBuilder(ProductViewServiceRibbonApplication.class).properties("server.port=" + port).run(args);

@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean:将该方法注册进spring容器
@LoadBalanced:注解是用来给RestTemplate做标记,以使用LoadBalancerClient来配置它

7.application.yml

指定了 eureka server 的地址,以及自己的名称。 另外是一些 thymeleaf 的默认配置。
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
spring.application.name: product-view-service-ribbon
spring.thymeleaf.cache: false
spring.thymeleaf.cache: false
spring.thymeleaf.prefix: classpath:/templates/
spring.thymeleaf.suffix: .html
spring.thymeleaf.encoding: UTF-8
spring.thymeleaf.content-type: text/html
spring.thymeleaf.mode: HTML5

Feign方式
该服务分为7个部分:

1.pom.xml

spring-cloud-starter-netflix-eureka-client(eureka 客户端)
spring-cloud-starter-openfeign(服务间调用依赖)
spring-boot-starter-web(???)
spring-boot-starter-thymeleaf(thymeleaf 做服务端渲染)

2.实体类(基础类,不做介绍)

3.Feign客户端

通过注解方式 访问 访问product-data-service服务的 products路径, product-data-service 既不是域名也不是ip地址,而是 数据服务在 eureka 注册中心的名称。
在这里插入图片描述

图7

4.服务类

在这里插入图片描述

图8

5.控制器

在这里插入图片描述

图9

6.启动类ProductViewServiceFeignApplication

注解:
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients(使用 Feign 方式)

new SpringApplicationBuilder(ProductViewServiceRibbonApplication.class).properties("server.port=" + port).run(args);

7.application.yml

eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
spring.application.name: product-view-service-feign
spring.thymeleaf.cache: false
spring.thymeleaf.prefix: classpath:/templates/
spring.thymeleaf.suffix: .html
spring.thymeleaf.encoding: UTF-8
spring.thymeleaf.content-type: text/html
spring.thymeleaf.mode: HTML5

5.微服务之间的彼此调用-----服务链路追踪。

该部分无需新建项目,只需启动链路追踪服务器,改进需要进行链路追踪的SpringBoot项目。这里需要进行链路追踪的项目是product-data-service和product-view-service-feign,只需要改进这两个项目即可

product-data-service

pom.xml

原:
1.spring-cloud-starter-netflix-eureka-client 表示这是个 eureka 客户端。
2.spring-boot-starter-web: 表示这是个web服务,会提供控制层
新增:
3.spring-cloud-starter-zipkin

application.yml

原:
spring.application.name: product-data-service(该微服务名称是 product-data-service)
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/(设置注册中心地址,表示将该服务在EurekaServer中进行注册 )
新增:
spring.zipkin.base-url: http://localhost:9411

启动类

启动类里配置 Sampler 抽样策略: ALWAYS_SAMPLE 表示持续抽样
``@Beanpublic Sampler defaultSampler() {return Sampler.ALWAYS_SAMPLE;}

product-view-service-feign

pom.xml

原:
1.spring-cloud-starter-netflix-eureka-client(eureka 客户端)
2.spring-cloud-starter-openfeign(服务间调用依赖)
3.spring-boot-starter-web(???)
4.spring-boot-starter-thymeleaf(thymeleaf 做服务端渲染)
新增:
5.spring-cloud-starter-zipkin

application.yml

原:
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
spring.application.name: product-view-service-feign
spring.thymeleaf.cache: false
spring.thymeleaf.prefix: classpath:/templates/
spring.thymeleaf.suffix: .html
spring.thymeleaf.encoding: UTF-8
spring.thymeleaf.content-type: text/html
spring.thymeleaf.mode: HTML5
新增:
spring.zipkin.base-url: http://localhost:9411

启动类

启动类里配置 Sampler 抽样策略: ALWAYS_SAMPLE 表示持续抽样
``@Beanpublic Sampler defaultSampler() {return Sampler.ALWAYS_SAMPLE;}

6.微服务间共享配置信息-----配置服务 Config Server。

配置服务为SpringBoot项目。

1.pom.xml

spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web
spring-cloud-config-server

2. 启动类ConfigServerApplication

注解:
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
@EnableEurekaClient

new SpringApplicationBuilder(ConfigServerApplication.class).properties(“server.port=” + port).run(args);

3. application.yml

spring.application.name: config-server
spring.cloud.config.label: master
spring.cloud.config.server.git.uri: https://github.com/how2j/springcloudConfig/
spring.cloud.config.server.git.searchPaths: respo
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/

7.配置客户端----productviewservicefeign

在原来的productviewservicefeign基础上进行改进

1.pom.xml

1.spring-cloud-starter-netflix-eureka-client(eureka 客户端)
2.spring-cloud-starter-openfeign(服务间调用依赖)
3.spring-boot-starter-web(???)
4.spring-boot-starter-thymeleaf(thymeleaf 做服务端渲染)
5.spring-cloud-starter-zipkin
新增
6.spring-cloud-starter-config

###1. application.yml
原:
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
spring.application.name: product-view-service-feign
spring.thymeleaf.cache: false
spring.thymeleaf.prefix: classpath:/templates/
spring.thymeleaf.suffix: .html
spring.thymeleaf.encoding: UTF-8
spring.thymeleaf.content-type: text/html
spring.thymeleaf.mode: HTML5
spring.zipkin.base-url: http://localhost:9411
现:
spring.application.name: product-view-service-feign
spring.thymeleaf.cache: false
spring.thymeleaf.prefix: classpath:/templates/
spring.thymeleaf.suffix: .html
spring.thymeleaf.encoding: UTF-8
spring.thymeleaf.content-type: text/html
spring.thymeleaf.mode: HTML5
spring.zipkin.base-url: http://localhost:9411

2.bootstrap.yml

spring.cloud.config.label: master
spring.cloud.config.profile: dev
spring.cloud.config.discovery.enabled: true
spring.cloud.config.discovery.serviceId: config-server
client.serviceUrl.defaultZone: http://localhost:8761/eureka/

3. ProductController控制类

在这里插入图片描述

图10

8.配置信息在多个微服务之间自动更新------RabbitMQ 总线 Bus

在配置完成的客户端基础上进行改造,改造对象为product-view-service-feign做出的改进有。

1.pom.xml

1.spring-cloud-starter-netflix-eureka-client(eureka 客户端)
2.spring-cloud-starter-openfeign(服务间调用依赖)
3.spring-boot-starter-web(???)
4.spring-boot-starter-thymeleaf(thymeleaf 做服务端渲染)
5.spring-cloud-starter-zipkin
6.spring-cloud-starter-config
新增
7.spring-boot-starter-actuator 用于访问路径:/actuator/bus-refresh
8.spring-cloud-starter-bus-amqp 用于支持 rabbitmq

2.bootstrap.yml

spring.cloud.config.label: master
spring.cloud.config.profile: dev
spring.cloud.config.discovery.enabled: true
spring.cloud.config.discovery.serviceId: config-server
client.serviceUrl.defaultZone: http://localhost:8761/eureka/
新增:
spring.cloud.bus.enabled: true
spring.cloud.bus.trace. enabled: true
rabbitmq.host: localhost
rabbitmq.port: 5672
rabbitmq.username: guest
rabbitmq.password: guest

application.yml

原:
spring.application.name: product-view-service-feign
spring.thymeleaf.cache: false
spring.thymeleaf.prefix: classpath:/templates/
spring.thymeleaf.suffix: .html
spring.thymeleaf.encoding: UTF-8
spring.thymeleaf.content-type: text/html
spring.thymeleaf.mode: HTML5
spring.zipkin.base-url: http://localhost:9411
新增:
management.endpoints.web.exposure.include: “"
management.endpoints.web.cors.allowed-origins: "

management.endpoints.web.cors.allowed-methods: “*”

3. 启动类 ProductDataServiceApplication==(product-date-service)== 新增rabbitMQ 端口检测。默认端口5672

4. FreshConfigUtil.java

在这里插入图片描述

图11

5.启动 Zipkin

支持了 rabbitMQ, 那么在默认情况下,它的信息就不会进入 Zipkin
解决办法:
原启动方式:java -jar zipkin-server-2.10.1-exec.jar
现启动方式: java -jar zipkin-server-2.10.1-exec.jar --zipkin.collector.rabbitmq.addresses=localhost

9.数据微服务集群都不能使用了, 视图微服务处理方式------断路器 Hystrix。

改造的对象是视图服务: product-view-service-feign。

1.pom.xml

原:1.spring-cloud-starter-netflix-eureka-client(eureka 客户端)
2.spring-cloud-starter-openfeign(服务间调用依赖)
3.spring-boot-starter-web(???)
4.spring-boot-starter-thymeleaf(thymeleaf 做服务端渲染)
5.spring-cloud-starter-zipkin
6.spring-cloud-starter-config
7.spring-boot-starter-actuator 用于访问路径:/actuator/bus-refresh
8.spring-cloud-starter-bus-amqp 用于支持 rabbitmq
新增:
9.spring-cloud-starter-netflix-hystrix

2. ProductClientFeign

在这里插入图片描述

图12

3.ProductClientFeignHystrix

在这里插入图片描述

图13

4.application.yml

原:
spring.application.name: product-view-service-feign
spring.thymeleaf.cache: false
spring.thymeleaf.prefix: classpath:/templates/
spring.thymeleaf.suffix: .html
spring.thymeleaf.encoding: UTF-8
spring.thymeleaf.content-type: text/html
spring.thymeleaf.mode: HTML5
spring.zipkin.base-url: http://localhost:9411
management.endpoints.web.exposure.include: “"
management.endpoints.web.cors.allowed-origins: "

management.endpoints.web.cors.allowed-methods: “*”
新增:
feign.hystrix.enabled: true(开启断路器)

10.断路器的开启与关闭时机------断路器监控Hystrix Dashboard。

创建 hystrix-dashboard子项目

1.pom.xml

spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web
spring-boot-starter-actuator
spring-cloud-starter-netflix-hystrix
spring-cloud-starter-netflix-hystrix-dashboard

2.启动类ProductServiceHystrixDashboardApplication

在这里插入图片描述

图14

3. application.yml

spring.application.name: hystrix-dashboard

4. ProductViewServiceFeignApplication

在这里插入图片描述

图15

5.AccessViewService

在这里插入图片描述

图16

11.集群聚合监控------断路器聚合监控 Turbine Hystrix Dashboard

创建turbine 项目

1.pom.xml

spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web
spring-boot-starter-actuator
spring-cloud-starter-netflix-hystrix
spring-cloud-starter-netflix-hystrix-dashboard
spring-cloud-starter-netflix-turbine

2.ProductServiceTurbineApplication

在这里插入图片描述

图17

3. application.yml

spring.application.name: turbine
security.basic.enabled: false
turbine.aggregator.clusterConfig: default
turbine.appConfig: product-view-service-feign ### 配置Eureka中的serviceId列表,表明监控哪些服务
turbine.clusterNameExpression: new String(“default”)
eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/

4.AccessViewService

在这里插入图片描述

图18

12.如何不暴露微服务名称,并提供服务------Zuul网关

创建zuul项目

1.pom.xml

spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web
spring-cloud-starter-netflix-zuul

2.ProductServiceZuulApplication

在这里插入图片描述

图19

3. application.yml

eureka.client.serviceUrl. defaultZone: http://localhost:8761/eureka/
spring.application.name: product-service-zuul
zuul.routes.api-a.path: /api-data/**
zuul.routes.api-a.serviceId: PRODUCT-DATA-SERVICE
zuul.routes.api-b.path: /api-view/**
zuul.routes.api-b.serviceId: PRODUCT-VIEW-SERVICE-FEIGN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值