农村基本制度建设网站,户型图在哪个网站找,缪斯设计网站,做网站很忙吗1、技术版本
jdk#xff1a;17及以上
-如果JDK8
springboot#xff1a;3.1及其以上
-版本2.x
springFramWork#xff1a;6.0及其以上
-版本5.x
springCloud#xff1a;2022.0.5
-版本格林威治或者休斯顿
2、模拟springcloud
父模块指定父pom
parent…1、技术版本
jdk17及以上
-如果JDK8
springboot3.1及其以上
-版本2.x
springFramWork6.0及其以上
-版本5.x
springCloud2022.0.5
-版本格林威治或者休斯顿
2、模拟springcloud
父模块指定父pom
parentgroupIdorg.springframework.boot/groupIdversion3.1.0/versionartifactIdspring-boot-starter-parent/artifactId
/parent
配置provider的application.yml
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db2username: rootpassword: 123456application:name: providerServer
mybatis:type-aliases-package: com.home.pojoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplserver:port: 8088
provider实现controller层services层和Mapper层pojo
provider的pom
propertiesspring-cloud.version2022.0.5/spring-cloud.version
propertiesspring-boot-starter-web
mysql-connector-j
lombok
mybatis-spring-boot-starter
mybatis-plus-spring-boot3-starterdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement
consumr层只用实现controller层和pojo
consumer的application.yml
server:port: 8080
spring:application:name: consumer
pom
propertiesspring-cloud.version2022.0.5/spring-cloud.version
propertiesspring-boot-starter-web
lombok!--SpringCloud,BOM,依赖清单导入所有依赖管理的坐标--dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement
consumer调用provider的方法
usersss userssses restTemplate.getForObject(http://localhost:8088/user/findAll,usersss.class);
return userssses;
访问consumer即可调用provider的方法
思考
1.硬URL的端口号端口变化服务宕机
2.负载均衡无法实现
3.无返回信息
4.优化RestTemplate
5.多服务权限拦截如何实现怎么保证所有微服务服务的安全性
6.优化众多微服务的配置文件
3.注册中心eureka Eureka服务器
pom
propertiesspring-cloud.version2022.0.5/spring-cloud.versionmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesmodelVersion4.0.0/modelVersionartifactIdeureka_server/artifactIddependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement
application.yml
#启动服务器端口
server:port: 8761
#应用程序名字
spring:application:name: eurekaServer
#EurekaServer的地址现在是自己的地址如果是集群需要写其它Server的地址。
eureka:client:fetch-registry: falseregister-with-eureka: falseservice-url:defaultZone: http://127.0.0.1:8761/eureka
启动类中标志EnableEurekaServer
SpringBootApplication
EnableEurekaServer
public class springBootEurekaServer {public static void main(String[] args) {SpringApplication.run(springBootEurekaServer.class,args);}
}
Eureka服务端组件
在服务提供者provider_service工程中添加Eureka客户端依赖
!--eureka客户端starter--dependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependency/dependencies!--SpringCloud,BOM,依赖清单导入所有依赖管理的坐标--dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement
在启动类上开启Eureka客户端发现功能EnableDiscoveryClient
SpringBootApplication
EnableDiscoveryClient // 开启Eureka客户端发现功能
public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class,args);}
}
注册到注册中心
修改配置文件spring.application.name指定应用名称作为服务ID使用
server:port: 8088
#配置eureka注册中心的地址
# 注册中心地址
eureka:client:service-url:defaultZone: http://127.0.0.1:8761/eureka
# 租约续约间隔时间默认30秒eureka:instance:lease-renewal-interval-in-seconds: 30
Eureka客户端组件
在服务消费者consumer_service工程中添加Eureka客户端依赖
!-- Eureka客户端 --
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency
!--SpringCloud所有依赖管理的坐标--
dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement
注册到注册中心
# 注册中心地址
eureka:client:service-url:defaultZone: http://127.0.0.1:8761/eurekaregistry-fetch-interval-seconds: 30
在启动类开启Eureka客户端EnableDiscoveryClient
SpringBootApplication
EnableDiscoveryClient
public class springBootConsumerStarter {public static void main(String[] args) {SpringApplication.run(springBootConsumerStarter.class,args);}Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}
配置完成后执行流程 通过注册中心客户端对象DiscoveryClient获取Eureka中注册的user-service实例列表 获取user-service服务实例对象 从实例对象中获取host地址和端口拼接请求地址 使用RestTemplate发送请求
public usersss findAll(){//discoveryClient 可以拉取注册中心中服务列表//getInstances(服务名)当前服务只有1个返回值是List集合获取0索引服务对象ServiceInstance instance discoveryClient.getInstances(PROVIDERSERVER).get(0);//instance服务对象的实例。获取服务提供者的IP端口号String host instance.getHost();int port instance.getPort();return restTemplate.getForObject(http://host:port/user/findAll,usersss.class);}
} 4.Nacos
相比于erueka Nacos消费者配置
propertiesspring.cloud.alibaba.version2022.0.0.0/spring.cloud.alibaba.versionpropertiesdependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependencydependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring.cloud.alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement
配置Nacos注册中心地址
server:port: 8080
spring:application:name: consumerNacos
# 注册中心地址cloud:nacos:discovery:server-addr: 127.0.0.1:8848
Nacos服务端配置
project.build.sourceEncodingUTF-8/project.build.sourceEncodingdependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!--SpringCloud,BOM,依赖清单导入所有依赖管理的坐标--dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring.cloud.alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement
application.yml不变
负载均衡
在consumer中配置即可 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency
在启动类配置 LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
问题需要编写类似的大量重复代码格式基本相同无非参数不一样
5.OpenFeign
Feign 的英文表意为“假装伪装变形” 是一个http请求调用的轻量级框架是以Java接口的方式发送Http请求而不用像Java中通过封装HTTP请求url的方式直接调用。Feign通过处理注解将请求模板化当实际调用的时候传入参数根据参数再应用到请求上进而转化成真正的请求这种请求相对而言比较直观。
Feign被广泛应用在Spring Cloud 的解决方案中是学习基于Spring Cloud 微服务架构不可或缺的重要组件。
需要导入 !--伪装调用jar--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency
启动引导类加EnableFeignClients注解
SpringBootApplication
EnableFeignClients
public class SpringBootFeignConStart {public static void main(String[] args) {SpringApplication.run(SpringBootFeignConStart.class,args);}
}
编写FeignClient接口使用SpringMVC的注解
FeignClient(providerUser)
public interface FeignUserService {RequestMapping(feign/eignQueryUserById)User feignQueryUserById(RequestParam(id) Integer id);
}
在Controller中注入Feign接口直接调用无需实现类但是GetMaping的Restful风格必去和调用provider的方法相同且传参方式也相同
访问接口测试
支持熔断服务降级、配置日志级别、请求压缩和响应压缩
6.网关GateWay
所有微服务的统一入口。Spring Cloud Gateway 是 Spring Cloud 的一个全新项目该项目是基于 Spring 5.0Spring Boot 2.0 和 Project Reactor 等技术开发的网关它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 Route路由这是网关的基本模块。它由一个 ID一个目标 URI一组断言和一组过滤器定义。如果断言为真则路由匹配。 Predicate断言这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容例如 headers 或参数。 Filter过滤器这是org.springframework.cloud.gateway.filter.GatewayFilter的实例我们可以使用它修改请求和响应。
创建SpringBoot工程gateway_server !--引入网关的jar包不能引web jar包--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!--负载均衡--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-loadbalancer/artifactId/dependencydependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.7.0/version/dependencydependencygroupIdjavax.xml.bind/groupIdartifactIdjaxb-api/artifactIdversion2.3.1/version/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring.cloud.alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement
application.yml
定义端口号名称注册到nacos
这是为当前路由规则指定一个 唯一的标识符 lb:// 是 负载均衡Load Balancer的前缀意味着请求将通过负载均衡机制路由到一个注册在 Eureka、Consul 或其他注册中心的服务。consumerOpenFeign 是服务的名称这个名称需要与注册中心中服务的名称一致。Spring Cloud Gateway 会从服务注册中心获取该服务的实际地址例如http://consumerOpenFeign:8080并且通过负载均衡器将请求转发到该服务。
predicates 用于定义请求的 匹配条件即哪些请求应该由当前的路由规则来处理。在这个例子中使用了 Path/**表示匹配所有的路径。
过滤器隐藏usertwo访问时不用书写避免接口地址暴露
server:port: 80
spring:application:name: gatewaycloud:nacos:server-addr: 127.0.0.1:8848#配置网关gateway:routes:- id: orderService #自定义路由的唯一标识符uri: lb://consumerOpenFeign #服务名字,从注册中心通过服务名称来获取接口predicates:- Path/** #拦截浏览器的请求地址filters:- PrefixPath/usertwo
自定义全局过滤器【重点】
token登录成功后根据登录用户名等用户ID生成一个属于这个用户自己的密钥就称为Token。下次用户访问的时候带着Token来请求服务器。拿Token值反解析出用户数据来无论是解析失败还是根本就没有Token拦截器不能放行。登录成功的时候产生一个加密后字符串Token响应回浏览器的响应头。浏览器再次请求的时候携带Token来访问服务器Token会放在浏览器的请求头中。 大部分都是异步请求axios拦截器 响应的时候获取响应头中的token值。请求的时候在请求头中添加token值。 token值存储在浏览器的缓存中缓存对象 localStorage, setItem存储键值对getItem传递键获取值 nacos注册和配置中心
nacos单独组件启动就可以了默认端口8848
微服务配置nacos注册中心的地址
spring:cloud:nacos:server-addr: 127.0.0.1:8848
sentinel流量防卫兵 !--熔断的支持--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-circuitbreaker-resilience4j/artifactId/dependency!--配置哨兵--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependency
配置文件
server:port: 8080
spring:application:name: consumerOpenFeigncloud:#哨兵sentinel:transport:dashboard: 127.0.0.1:8086nacos:server-addr: 127.0.0.1:8848openfeign:#feign熔断支持circuitbreaker:enabled: true
在方法上定义哨兵 GetMapping(/selectusertwo)SentinelResource(value selectusertwo,fallback selectusertwoFallBack,blockHandler selectusertwoHandler)public usersss selectusertwo(RequestParam(id) Integer id){if (id4){throw new RuntimeException(请输入正确ID);}return userServicesTwo.selectusertwo(id);}
fallback限流
blockHandler熔断