springcloud 服务消费者 - Feign

xiaoxiao2025-04-16  13

简介

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign只需要创建一个接口并添加注解,可以使用Feign注解和JAX-RS注解。Feign默认集成了Ribbon,并和Eureka结合。

实践

1、启动eureka-server,端口为8761.启动service-hi两次,端口分别为8762、8763.

2、创建一个feign的服务。

(1)新建一个spring-boot工程,取名为service-feign,在它的pom文件引入Feign的起步依赖spring-cloud-starter-feign,eureka的起步依赖spring-cloud-starter-netflix-eureka-client, web的起步依赖spring-boot-starter-web

<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>

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

eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8765 spring: application: name: service-feign

(3)在程序的启动类ServiceFeignApplication,加上@EnableFeignClient注解开启Feign的功能。

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

(4)定义一个feign接口,通过@FeignClient("服务名")来指定调用哪个服务。

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

(5)在Web层的controller层,对外暴露一个“/hi”的API接口,通过上面定义的Feign客户端SchedualServiceHi来消费服务。

@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=xxx

转载请注明原文地址: https://www.6miu.com/read-5028418.html

最新回复(0)