SpringCloudb2b2c电子商务- 服务消费者(Feign)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > SpringCloudb2b2c电子商务- 服务消费者(Feign)

SpringCloudb2b2c电子商务- 服务消费者(Feign)

 2020/3/5 18:12:20  proehfoekw  程序员俱乐部  我要评论(0)
  • 摘要:Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。简而言之:Feign采用的是基于接口的注解Feign整合了ribbon,具有负载均衡的能力整合了Hystrix,具有熔断的能力二、准备工作继续用上一节的工程,启动eureka-server
  • 标签:Spring 电子商务 B2C B2B 服务 消费者

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口注解

它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成

了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

?

简而言之:

?

Feign 采用的是基于接口的注解

Feign 整合了ribbon,具有负载均衡的能力

整合了Hystrix,具有熔断的能力

二、准备工作

继续用上一节的工程, 启动eureka-server,端口为8761; 启动service-hi 两次,端口分别为8762 、8773.

了解springcloud架构可以加求求:三五三六二四七二五九

三、创建一个feign的服务

新建一个spring-boot工程,取名为serice-feign,在它的pom文件引入Feign的起步依赖spring-cloud-starter-feign、

Eureka的起步依赖spring-cloud-starter-netflix-eureka-client、Web的起步依赖spring-boot-starter-web,代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 class="xml plain" style="font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; margin: 0px !important; padding: 0px !important; border-radius: 0px !important; background: none !important; border: 0px !important; float: none !important; line-height: 1.1em !important; overflow: visible !important; vertical-align: baseline !important; width: auto !important; font-size: 13px !important;"><project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ?????????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd"> ????<modelVersion>4.0.0</modelVersion> ????<groupId>com.forezp</groupId> ????<artifactId>service-feign</artifactId> ????<version>0.0.1-SNAPSHOT</version> ????<packaging>jar</packaging> ????<name>service-feign</name> ????<description>Demo?project?for?Spring?Boot</description> ????<parent> ????????<groupId>com.forezp</groupId> ????????<artifactId>sc-f-chapter3</artifactId> ????????<version>0.0.1-SNAPSHOT</version> ????</parent> ????<dependencies> ????????<dependency> ????????????<groupId>org.springframework.cloud</groupId> ????????????<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.springframework.boot</groupId> ????????????<artifactId>spring-boot-starter-web</artifactId> ????????</dependency> ????????<dependency> ????????????<groupId>org.springframework.cloud</groupId> ????????????<artifactId>spring-cloud-starter-openfeign</artifactId> ????????</dependency> ????</dependencies> ????? ????</project>

在工程的配置文件application.yml文件,指定程序名为service-feign,端口号为8765,服务注册地址为http://localhost:8761/eureka/ ,代码如下:

1 2 3 4 5 6 7 8 9 eureka: ??client: ????serviceUrl: ??????defaultZone:?http://localhost:8761/eureka/ server: ??port:?8765 spring: ??application: ????name:?service-feign

在程序的启动类ServiceFeignApplication ,加上@EnableFeignClients注解开启Feign的功能:

1 2 3 4 5 6 7 8 9 @SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient @EnableFeignClients public?class?ServiceFeignApplication?{ ????public?static?void?main(String[]?args)?{ ????????SpringApplication.run(?ServiceFeignApplication.class,?args?); ????} }

定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了service-hi服务的“/hi”接口,代码如下:

1 2 3 4 5 @FeignClient(value?=?"service-hi") public?interface?SchedualServiceHi?{ ????@RequestMapping(value?=?"/hi",method?=?RequestMethod.GET) ????String?sayHiFromClientOne(@RequestParam(value?=?"name")?String?name); }

在Web层的controller层,对外暴露一个"/hi"的API接口,通过上面定义的Feign客户端SchedualServiceHi 来消费服务。代码如下:

1 2 3 4 5 6 7 8 9 10 @RestController public?class?HiController?{ ????//编译器报错,无视。?因为这个Bean是在程序启动的时候注入的,编译器感知不到,所以报错。 ????@Autowired ????SchedualServiceHi?schedualServiceHi; ????@GetMapping(value?=?"/hi") ????public?String?sayHi(@RequestParam?String?name)?{ ????????return?schedualServiceHi.sayHiFromClientOne(?name?); ????} }

启动程序,多次访问http://localhost:8765/hi?name=forezp,浏览器交替显示:

hi forezp,i am from port:8762
hi forezp,i am from port:8763

发表评论
用户名: 匿名