微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringCloud微服务二,Feign声明式客户端

1、Feign简介

Feign是一个声明式的web服务客户端,它使得写web服务变得更简单,试想一下,在微服务项目中,多个服务分机部署在不同的服务器上,如果一个服务想要去调用另外一个服务的方法,通常会选择http请求,但在springcloud中,提供了Feign声明式客户端去更优雅的解决服务之间接口调用的问题,Feign通过@FeignClient注解方法获取注册注册中心对应的服务,通过JDK动态代理实现远程调用

在这里插入图片描述

2、SpringCloud整合Feign

2.1、添加provide2服务

修改provide2服务的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.springcloud</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.springcloud</groupId>
    <artifactId>provider2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider2</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- feign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</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-alibaba-nacos-discovery</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
    </dependencies>
</project>

2.2、配置provide2服务

修改provide2服务中的bootstrap.yaml文件,将provide2服务注册到nacos。

server:
  port: 9002
spring:
  application:
    name: provide2
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

2.3、添加feign接口

此处因为要调用provide1的接口,@FeignClient注解中的name属性对应接口提供方在nacos的注册中心所注册的服务名,此处我要调用provide1服务提供的/provide1/info接口,该接口Rest类型为GET。

@FeignClient(name = "provide1")
public interface FeignInterface {

    @RequestMapping(value = "/provide1/info" , method = RequestMethod.GET)
    Map<String,Object> hello();
}

2.4、添加控制器

添加测试控制器,运行provide1和provide2服务

@RestController
@RequestMapping("/feign")
public class HelloController {

    @Autowired
    private FeignInterface feignInterface;

    @GetMapping("/info")
    public Map<String,Object> getInfo(){
        return feignInterface.hello();
    }
}

在浏览器输入provide2的接口地址http://localhost:9002/feign/info,浏览器显示结果如下,接口调用成功

在这里插入图片描述

完结

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐