Spring-cloud 学习笔记
2021-03-17 11:17:24 31 举报
AI智能生成
springboot/cloud 学习笔记
作者其他创作
大纲/内容
POM中的SpringCloud依赖<br>
<parent><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-parent</artifactId><br> <version>2.0.6.RELEASE</version><br> </parent><br><br> <dependencyManagement><br> <dependencies><br> <!-- 导入Spring Cloud的依赖管理 --><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-dependencies</artifactId><br> <version>Finchley.SR1</version><br> <type>pom</type><br> <scope>import</scope><br> </dependency><br> </dependencies><br> </dependencyManagement><br><br><br>
eureka/zookeeper/consul
eureka
使用步骤<br>
pom依赖
服务端
<dependencies><br> <!--springboot 整合eureka服务端--><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><br> </dependency><br></dependencies>
客户端
<dependencies><br> <!--springboot 整合eureka客户端--><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><br> </dependency>
启动类注解
服务端
@SpringBootApplication<br>@EnableEurekaServer //声明这是一个Eureka服务<br>
客户端
@SpringBootApplication//申明这是一个Spring Boot项目<br>@EnableEurekaClient//开启Eureka客户端注解
配置文件
服务端
###服务端口号<br>server.port=8100<br>###服务名称<br>spring.application.name=app-eureka-center<br>#注册中心地址<br>eureka.instance.hostname=eureka1<br>###客户端调用地址<br>eureka.client.serviceUrl.defaultZone=http://eureka2:8200/eureka/<br>###是否将自己注册到Eureka服务中(集群的时候为true)<br>eureka.client.register-with-eureka=true<br>###是否从Eureka中获取注册信息,因为自己为注册中心,不会在该应用中的检索服务信息<br>eureka.client.fetch-registry=true<br>###关闭自我保护<br>eureka.server.enableSelfPreservation=false
客户端
server:<br> port: 8081<br>###服务名-注册到Eureka<br>spring:<br> application:<br> name: service-item<br> ###注册中心地址<br>eureka:<br> client:<br> service-url:<br> ###注册中心地址,多个注册中心用逗号隔开<br> defaultZone: http://127.0.0.1:8100/eureka,http://127.0.0.1:8200/eureka<br> ###注册到服务中心<br> register-with-eureka: true<br> ###从eureka上检索服务<br> eureka.client.fetch-registry: true
zookeeper
使用步骤
consul
使用步骤
feign
使用步骤<br>
pom依赖
<!--springboot 整合fegnin客户端--><br><dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-starter-openfeign</artifactId><br> </dependency>
启动类中提供restTemplate
@Bean<br> @LoadBalanced<br> public RestTemplate restTemplate() {<br> return new RestTemplate(new OkHttp3ClientHttpRequestFactory());<br> //return new RestTemplate();<br> }
启动类注解
@SpringBootApplication//申明这是一个Spring Boot项目<br>@EnableHystrix//开启断路器<br>@EnableEurekaClient//开启Eureka客户端注解<br>@EnableFeignClients(basePackages ="site.redstone.order.feign")
编写远程调用的服务本地接口类
public interface ItemFeignClient {<br> /**<br> * 这里定义了类似于SpringMVC用法的方法,就可以进行RESTful方式的调用了<br> * @param id<br> * @return<br> */<br> @RequestMapping(value = "/item/{id}", method = RequestMethod.GET)<br> Item queryItemById(@PathVariable("id") Long id);<br>}
在上一步的接口类上打上注解
@FeignClient(value = "service-item",fallback = ItemServiceFallback.class) <br>//此处的value为远程服务在eureka中的注册名,fallback为远程服务调用失败后调用的降级方法的实现类<br>//使用降级需开启Hystrix并且在配置文件中加入<br>//###开启断路器<br>//feign.hystrix.enabled=true<br><br>eg:降级方法实现类<br>@Component<br>public class ItemServiceFallback implements ItemFeignClient {<br> @Override<br> public Item queryItemById(Long id) {<br> return new Item(null, "服务降级方法queryItemById", null, "服务降级方法queryItemById", null);<br> }<br>}
ribbon
使用步骤
restTemplate注解
@LoadBalanced
zuul
使用步骤
pom依赖
<!--整合网关zuul--><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-starter-netflix-zuul</artifactId><br> </dependency>
启动类注解
@EnableZuulProxy<br>@SpringBootApplication<br>@ComponentScan(basePackages = "site.redstone.gateway.filter") //扫描网关的过滤器包<br>
编写过滤器(可选)
@Component<br>public class UserLoginFilter extends ZuulFilter {<br> /**<br> * filterType:返回字符串代表过滤器的类型<br> * a)pre:请求在被路由之前执行<br> * b)routing:在路由请求时调用<br> * c)post:在routing和error过滤器之后调用<br> * d)error:处理请求时发生错误调用<br> * @return<br> */<br> @Override<br> public String filterType() {<br> return "pre";<br> }<br> /**<br> * 通过返回的int值来定义过滤器的执行顺序,数字越小优先级越高。<br> * @return<br> */<br> @Override<br> public int filterOrder() {<br> return 0;<br> }<br> /**<br> *是否启动此过滤器<br> * @return<br> */<br> @Override<br> public boolean shouldFilter() {<br> return true;<br> }<br> @Override<br> public Object run() throws ZuulException {<br> RequestContext requestContext = RequestContext.getCurrentContext();<br> HttpServletRequest request = requestContext.getRequest();<br> String token = request.getParameter("token");<br> if(StringUtils.isEmpty(token)){<br> requestContext.setSendZuulResponse(false); // 过滤该请求,不对其进行路由<br> requestContext.setResponseStatusCode(401); // 设置响应状态码<br> requestContext.setResponseBody(" please login first!!"); // 设置响应状态码<br> return null;<br> }<br> return null;<br> }<br>}
配置文件
路由规则
server:<br> port: 8087 #服务端口<br>spring:<br> application:<br> name: app-zuul-gateway #指定服务名<br>zuul:<br> routes: #定义服务转发规则<br> item-service: #item-service这个名字是任意写的<br> path: /service-item/** #匹配item-service的请求app-item服务<br> #url: http://127.0.0.1:8081 #真正的微服务地址<br> serviceid: service-item<br> order-service: #名字尽量和业务系统相关<br> path: /service-order/** #匹配order-service的请求app-order服务<br> serviceid: service-order
eureka配置(可选)
###服务注册到eureka注册中心的地址<br>eureka:<br> client:<br> service-url:<br> defaultZone: http://127.0.0.1:8100/eureka/,http://127.0.0.1:8200/eureka/<br> ###因为该应用为服务提供者,是eureka的一个客户端,需要注册到注册中心<br> register-with-eureka: true<br> ###是否需要从eureka上检索服务<br> fetch-registry: true<br> instance:<br> prefer-ip-address: true #将自己的ip地址注册到Eureka服务中<br> ip-address: 127.0.0.1<br> instance-id: ${spring.application.name}###${server.port} #指定实例id
config
使用步骤
pom依赖
服务端
<!--整合配置中心--><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-config-server</artifactId><br> </dependency>
客户端
<!--spring cloud config--><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-config-client</artifactId><br> </dependency>
<!--引入actuator实现配置文件的动态更新--><br><dependency><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-actuator</artifactId><br> </dependency>
启动类注解
服务端
@EnableConfigServer<br>@SpringBootApplication<br>@EnableEurekaClient<br>public class ConfigApp {<br> public static void main(String[] args) {<br> SpringApplication.run(ConfigApp.class,args);<br> }<br>}
客户端
无
配置文件
服务端
server:<br> port: 7788 #服务端口<br>spring:<br> application:<br> name: service-config #指定服务名<br> cloud:<br> config:<br> server:<br> git: #配置git仓库地址<br> uri: https://gitee.com/redstone_hgw/spring-cloud-config.git<br> search-paths:<br> - service-item #配置文件目录地址<br> username: xxxxxxxxx@163.com#码云账号(公有项目不需要设置)<br> password: xxxxxxxxx #码云密码(公有项目不需要设置)<br> label: master #分支名称
客户端
application.yml
server:<br> port: 8081<br> ###服务名-注册到Eureka<br> spring:<br> application:<br> name: service-item<br>###注册中心地址<br>eureka:<br> client:<br> service-url:<br> defaultZone: http://127.0.0.1:8100/eureka,http://127.0.0.1:8200/eureka <br> ###注册到服务中心<br> register-with-eureka: true<br> ###从eureka上检索服务<br> eureka.client.fetch-registry: true<br>#开启所有端点 actuator配置<br>management:<br> endpoints:<br> web:<br> exposure:<br> include: "*"
bootstrap.yml
###注册中心地址<br>eureka:<br> client:<br> service-url:<br> defaultZone: http://127.0.0.1:8100/eureka,http://127.0.0.1:8200/eureka<br> ###注册到服务中心<br> register-with-eureka: true<br> ###从eureka上检索服务<br> eureka.client.fetch-registry: true<br><br><br>###因为bootstrap文件在application.yml之前加载 因此此文件中也要配置eureka<br>spring:<br> cloud:<br> config:<br> #uri: http://127.0.0.1:7788/<br> name: config #对应配置中心的应用名称,默认是本应用名,即spring.application.name,该名称要和git中的配置一致<br> profile: dev #对应配置服务中的{profile}<br> label: master #对应的分支<br> discovery:<br> enabled: true #启用发现服务功能<br> service-id: service-config #指定配置中心工程的名称<br><br><br>
准备需要远程获取的配置<br>
https://gitee.com/redstone_hgw/spring-cloud-config/raw/master/service-item/config-dev.properties
user.username=redstone<br>user.password=honggaowei<br>user.realname=redstone<br>user.age=26<br>user.welcome=welcome to spring cloud!<br>
配置类注解
在需要获取的字段上使用@Value("${xxx}")注解<br>配置类也需要加上@Component注解加入到IOC的控制范围<br>eg:<br>@Value("${user.username}")<br>private String username;<br>如果此类需要在远程配置文件更改时自动更新,需要在类上同时加上@RefreshScope注解<br>
配置刷新
当更改了远程的配置文件时,如果希望当前系统中的使用@Value注解的类中的值相应更新的话<br>执行以下操作<br>Post http://127.0.0.1:8081/actuator/refresh<br>例如文件中的welcome更新了话,会收到以下返回<br>response:<br>[<br> "config.client.version",<br> "user.welcome"<br>]
扩展:<br> Gitee提供hook:在仓库中的文件修改时,向指定的地址发送请求,因此可以在hook的url中配置上面的Post http://127.0.0.1:8081/actuator/refresh 以达到自动更新配置的需求<br>
hystrix
使用步骤
pom依赖
<!--整合hystrix--><br> <dependency><br> <groupId>org.springframework.cloud</groupId><br> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId><br> </dependency>
启动类注解
@SpringBootApplication//申明这是一个Spring Boot项目<br>@EnableHystrix//开启断路器<br>@EnableEurekaClient//开启Eureka客户端注解<br>@EnableFeignClients(basePackages ="site.redstone.order.feign")<br>@ComponentScan(basePackages = {"site.redstone.order.controller", "site.redstone.order.service"})<br>public class OrderApp {<br> public static void main(String[] args) {<br> SpringApplication.run(OrderApp.class, args);<br> }<br><br> /**<br> * 向Spring容器中定义RestTemplate对象<br> * @return<br> */<br> @Bean<br> @LoadBalanced<br> public RestTemplate restTemplate() {<br> return new RestTemplate(new OkHttp3ClientHttpRequestFactory());<br> //return new RestTemplate();<br> }<br>}
收藏
收藏
0 条评论
下一页