SpringCloud学习6-如何创建一个服务消费者consumer

上一节如何创建一个服务提供者provider已经启动了一个provider的server,提供用户信息查询接口。接下来,我们启动另一个provider,由于是同一台机器本地测试,我们换一个端口

--server.port=8084

通过启动传参数覆盖port。这样,我们就有两个provider实例了。接下来,可以使用我们consumer负载均衡的消费这两个provider。

升级eureka依赖

eureka之前的pom依赖过期了,需要修改为

spring-cloud-starter-netflix-eureka-server

同样的,所有的client都要修改为

spring-cloud-starter-netflix-eureka-client 创建一个consumer工程

创建一个子模块。

https://github.com/Ryan-Miao/spring-cloud-Edgware-demo/tree/master/consumer-demo

配置基本和provider一致

<dependencies> <!--springboot 依赖start--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <!--springboot 依赖结束--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> <!--工具类 start--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> </dependency> <!--工具类end--> <!--内部依赖--> <dependency> <groupId>com.test</groupId> <artifactId>provider-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!--内部依赖end--> </dependencies>

spring-cloud-starter-netflix-eureka-client eureka客户端,负责维护注册和心跳

spring-cloud-starter-openfeign 声明式的HttpClient Feign客户端

spring-cloud-starter-netflix-ribbon 客户端负载均衡

spring-cloud-starter-netflix-hystrix http请求健康熔断

provider-api 我们定义好的provider请求的客户端

启动类

启动类和provider相同,多了一行注解

@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }

EnableFeignClients 启用Feign

Swagger等基础配置

同provider,提供几个简单api。省略叙述。

FeignClient 远程调用

创建一个接口,继承我们provider-api里声明的接口

@FeignClient(value = "PROVIDER-DEMO", fallback = UserClientFallback.class) public interface UserClient extends UserApi { }

FeignClient会标注这是一个Feign的客户端,在项目启动的时候就会扫描到,value是连接的service的名称,这里即我们的provider, fallback则是当远程请求失败的时候,服务降级,我们来决定做什么。

如果不填写fallback,则请求遇到非200会报错,抛出一个RuntimeException, HystrixRuntimeException. 有可能是远程返回500, 400等,也有可能是连接超时,还有可能是hystrix 熔断。

而填写了fallback, 则会在服务调用失败的时候,转调用我们对应的fallback方法。

fallback就是实现我们这个UserClient接口。

@Component @RequestMapping("/userClientFallback") public class UserClientFallback implements UserClient { @Override public List<UserVo> list() { UserVo userVo = new UserVo(); userVo.setAge(1); userVo.setBirth(LocalDate.now()); userVo.setId(1); userVo.setName("fallback"); return Lists.newArrayList(userVo); } @Override public String fallback() { return "访问失败后调用此方法,进行服务降级."; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwsdw.html