springcloud中有很多组件,第一步先引入springcloud的版本控制依赖,之后再进行各个组件的配置与测试,springcloud的版本为:Finchley.SR2。 注意:由于springcloud构建于springboot之上,因此使用springcloud的组件时需要结合springboot的版本,springboot版本与springcloud的版本对应关系如下: 上图中第一列为springcloud的版本,第二列为springboot的版本,请根据自己的springboot版本进行搭建。 由于版本在不断更新,因此请前往查看最新版本对应详情,官网传送门:https://spring.io/projects/spring-cloud,进入后查看页面最下方内容就可看到。
在父pom中引入springCloud的版本约束依赖,如下:
<!--引入springcloud版本控制,注意这里需要查看springboot与springcloud的对应版本--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>这样的目的在于在引入springCloud的各组件的时候,将会有统一版本的约束,无需我们自己进行版本的依赖,同时要注意springCloud版本是在springboot之上构建的,引入springCloud时需考虑版本的依赖关系。
1.2配置eureka服务端
创建新的eureka的moudle,在pom中引入eureka服务端依赖,如下所示:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>编写application.yml,配置eureka服务端,如下所示:
eureka: client: registerWithEureka: false #是否将自己注册到Eureka服务中,本身就是所有无需注册 fetchRegistry: false #是否从Eureka中获取注册信息 serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址 defaultZone: http://127.0.0.1:${server.port}/eureka/启动类加注解:@EnableEurekaServer
1.3配置eureka客户端
子模块引入依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>启动类加注解:
@EnableEurekaClient @EnableDiscoveryClientaplication.yml添加如下信息,用户服务注册与发现:
spring: application: name: roleDemo-userRolePermission eureka: client: service-url: defaultZone: http://127.0.0.1:6666/eureka1.4feign的远程服务调用
在要调用的模块中添加依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>启动类添加服务调用注解:
@SpringBootApplication @EnableDiscoveryClient @EnableEurekaClient @EnableFeignClients public class FeignApplication { public static void main(String[] args) { SpringApplication.run(FeignApplication.class); } }application配置:
#eureka注册 eureka: client: service-url: defaultZone: http://127.0.0.1:6666/eureka spring: #配置微服务名称,用户服务注册与发现 application: name: roleDemo-feign server: port: 8081 编写要调用的接口: @FeignClient("roleDemo-userRolePermission") public interface UserClient { @RequestMapping(value = "user/findAll", method = RequestMethod.GET) List<TUser> findAll(); }编写要调用该接口的类:
@RestController @RequestMapping("/feign") public class FeignController { @Autowired private UserClient userClient; @RequestMapping("/feignUserFindAll") public List<TUser> feignUserFindAll(){ return userClient.findAll(); } }测试访问编写的调用类,返回调用的接口的提供的数据。
1.5feign自带的hystrix熔断器
在要调用的模块中的application中开启熔断器:
#开启熔断器 feign: hystrix: enabled: true创建写好的调用接口类的实现类
在写好的调用接口上添加,fallback = UserClientImpl.class ,意思是当调用失败时执行熔断操作,走该实现类的方法。
1.6网关
这里的常见网管有两种spring自己的gateway,还有Netflix的开源网关,微服务网关将解决一下问题;
# 客户端会多次请求不同微服务,增加客户端的复杂性 # 存在跨域请求,在一定场景下处理相对复杂 # 认证复杂,每一个服务都需要独立认证 # 难以重构,随着项目的迭代,可能需要重新划分微服务,如果客户端直接和微服务通 信,那么重构会难以实施 # 某些微服务可能使用了其他协议,直接访问有一定困难1.7配置中心服务端
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>配置文件
#eureka注册 eureka: client: service-url: defaultZone: http://127.0.0.1:6666/eureka spring: #配置微服务名称,用户服务注册与发现 application: name: roleDemo_config #配置中心连接码云 cloud: config: server: git: uri: 自己配置中心的地址,可以为码云,github server: port: 12000 #开启熔断器 feign: hystrix: enabled: true启动类添加注解
@EnableConfigServer //开启配置服务启动成功,http://localhost:12000/文件名称,即可查看。
1.8配置中心客户端
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> 或者 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>修改配置文件application.yml为bootstrap.yml,修改内容为:
spring: cloud: config: name: base profile: dev label: master uri: http://127.0.0.1:12000将application.yml内容复制粘贴到码云仓库
重新启动,即可正常访问。
1.9消息总线
1.9.1配置中心服务端
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐bus</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐stream‐binder‐rabbit</artifactId> </dependency>修改application.yml文件,添加如下内容:
rabbitmq: host: 192.168.184.135 management: #暴露触发消息总线的地址 endpoints: web: exposure: include: bus‐refresh1.9.2配置客户端
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐bus</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐stream‐binder‐rabbit</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐actuator</artifactId> </dependency>码云配置文件添加内容
rabbitmq: host: 192.168.184.135postman测试 Url: http://127.0.0.1:12000/actuator/bus-refresh Method: post