微服务之SpringCloud架构第三篇——服务调用及Feign介绍和使用

版权声明:本文为博主原创文章,转载请注明出处,不得用于商业用途。 https://blog.csdn.net/pilihaotian/article/details/82497917

1、Feign介绍

Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。 
它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。

2、实例

1、续上一篇,启动注册中心eureka-server 端口8761、一个客户端应用2个实例,端口为8762和8763

2、创建feign

新建springboot应用,导入相关pom依赖,如下所示:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>

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

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

修改yml文件,将应用注册到eureka中,如下:

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

在启动类上,增加feign客户端注解,开启feign功能:


@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients
public class SericefeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(SericefeignApplication.class, args);
    }
}

定义一个service接口,指定调用具体服务、具体接口:

@FeignClient(value = "DemoApp")
public interface ServiceSayHi {
    @RequestMapping(value = "/sayHi",method = RequestMethod.GET)
    String sayHiFromClient(@RequestParam(value = "name") String name);
}

其中DemoApp表示需要调用的应用服务,该应用服务已注册到注册中心,sayHi是需要调用的接口

编写Controller进行调用测试:

@RestController
public class HiController {
    @Autowired
    private ServiceSayHi serviceSayHi;
    @RequestMapping("/sayHi")
    public String sayHi(@RequestParam String name){
        return serviceSayHi.sayHiFromClient(name);
    }

}

访问http://localhost:8764/sayHi?name=张三

结果为:

再次刷新,结果为:

多次刷新,发现,端口号在8762和8763之间不断交替变化,说明feign发挥了作用。

猜你喜欢

转载自blog.csdn.net/pilihaotian/article/details/82497917