代码拉取完成,页面将自动刷新
1 添加依赖 <parent> <!--引入spring boot的依赖 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> </parent> <!-- springcloud 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <!-- springcloud alibaba 依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- mysql 依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- junit 依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- log4j 依赖 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!--druid 依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!--mybatis 依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybati.spring.boot.version}</version> </dependency> <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <!-- hutool-all java工具类库 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.2.3</version> </dependency> 2 抽离公共模块 cloud-api-common 引入所有项目要用到的依赖并且在其他项目引入该模块 3 服务注册发现 Eureka 服务端依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> 新建项目cloud-eureka-server 添加相关配置 service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置Eureka server 交互的地址查询服务和注册服务的地址 将其他服务注册到server 把provider-service-8080 到cloud-eureka-server 添加pom客户端依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> Nacos 装好Nacos服务端(可用docker) 添加依赖 4 OperFeign集成(Feign停更) 添加依赖 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 编写相应的service 封装对于provider的接口操作 注解不要引入错了,配置好超时时间,不然容易出现错误 超时配置 feign: httpclient: connection-timeout: 10000 5 Hystrix 熔断器(后续已经停更) 添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> 服务降级一般放在客户端调用 主要配置注解 @EnableHystrix 简单配置使用 //模拟服务降级处理 @HystrixCommand(fallbackMethod = "fallback", commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")}) 全局配置使用 @DefaultProperties 注意回调函数参数列表的问题 解耦 实现FeignClient的接口,统一实现一个回调函数 @FeignClient(value = "PROVIDER-SERVICE-8080",fallback = ConsumerServiceImpl.class) 修改配置 feign: httpclient: connection-timeout: 10000 hystrix: enabled: true 服务熔断(另一种更友好的服务降级机智) 具体步奏就是服务降级->熔断->恢复调用链路 //模拟服务熔断处理 @HystrixCommand(fallbackMethod = "fallbackGetUserById", commandProperties = { @HystrixProperty(name="circuitBreaker.enabled",value="true"), //开启断路器 @HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value="10"), //请求次数 @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value="10000"), //休眠窗口时间 @HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value="60") //失败率达到多少触发服务熔断 }) 打开hystrix的监控画面 引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix-dashboard --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> 启动类添加这个Springboot2.0之后添加的 @Bean public ServletRegistrationBean getServlet() { HystrixMetricsStreamServlet streamServlet =new HystrixMetricsStreamServlet(); ServletRegistrationBean registrationBean =new ServletRegistrationBean(streamServlet); registrationBean.setLoadOnStartup(1); registrationBean.addUrlMappings("/hystrix.stream"); registrationBean.setName("HystrixMetricsStreamServlet"); return registrationBean; } 打开注解@EnableHystrixDashboard 访问web界面地址:http://localhost:8080/hystrix 监控查看URL:localhost:8080/hystrix.stream 6 网关(zuul(停更),gateway) Route(路由) id与目标URI,一列的断言和过滤器组成,断言为true匹配该路由 Predicate(断言) java8,请求断言匹配路由 Filter(过滤) spring的GatewayFilter实例 引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> 添加配置(静态路由) cloud: gateway: routes: - id: consumer_route uri: http://localhost:8080 predicates: - Path=/get/** 动态路由 cloud: gateway: routes: - id: consumer_route uri: lb://provider-service-8080 predicates: - Path=/get/** discovery: locator: enabled: true 过滤器配置 实现这个接口GlobalFilter 7 config 添加依赖 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> 在码云上新建一个配置项目 添加配置 cloud: config: server: git: uri: https://gitee.com/ArnoldSu/Spring-Cloud-Config.git #git地址 #搜索目录 search-paths: - Spring-Cloud-Config label: master #读取分支 测试访问:http://localhost:3344/master/application-dev.yml 其他微服务统一添加config客户段依赖实现中心化配置(手动post刷新配置) 添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!--springboot 监控--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 新增一个bootstrap.yml 配置文件 #端口配置 server: port: 80 spring: application: name: cloud-basic-service cloud: config: label: master #分支名称 name: cloud-basic-service-config #配置文件名称 profile: dev #读取后缀名称 uri: http://localhost:3344 #配置中心地址 eureka: client: service-url: defaultZone: http://localhost:7001/eureka/ #设置Eureka server地址 management: endpoints: web: exposure: include: "*" 8 bus 广播刷新配置 在cloud-config-service 添加总线依赖(支持rabbitmq和kafka,这里用rabbit) <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bus-amqp --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> 添加rabbitmq配置信息 #端口配置 server: port: 3344 spring: application: name: cloud-config-service cloud: config: server: git: uri: https://gitee.com/ArnoldSu/Spring-Cloud-Config.git #git地址 #搜索目录 search-paths: - Spring-Cloud-Config label: master #读取分支 rabbitmq: #总线rabbit配置 host: 159.138.20.29 username: guest password: guest port: 5672 eureka: client: service-url: defaultZone: http://localhost:7001/eureka/ #设置Eureka server地址 #暴露bus刷新端点 management: endpoints: web: exposure: include: 'bus-refresh' 在运用到config配置文件的客户端也要添加bus依赖,以及rabbit的相关配置(依赖要用2.2.2-release,不然找不到mq的依赖) 9 Stream 构建消息驱动的微服务框架 新增依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> 新增配置生产者方 cloud: stream: binders: #在此配置要绑定的rabbitmq的服务信息 defaultRabbit: #表示定义的名称,用于binding的整合 type: rabbit #消息组件类型 environment: #设置rabbitmq的相关环境配置 spring: rabbitmq: host: localhost port: 5672 username: guest password: guest bindings: #服务的整合处理 output: #这个名字是一个通道的名称 destination: studyExchange #表示要使用的Exchange名称定义 content-type: application/json #设置消息类型,本次为json,文本则设置“text/plain” binder: defaultRabbit #设置要绑定的消息服务的具体设置 本项目所有项目框架都以尚硅谷周阳老师2020最新版Spring Cloud的项目学习音频资料搭建
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。