spring cloud feign 使用

一、什么是Feign

Feign是一个声明式的web service客户端,它的出现使开发web service客户端变得简单、方便。使用Feign开发只需要在对应的接口加上注解即可,比如:FeignClient注解。Feign支持编码器与解码器,spring cloud open Feign 对Feign进行增强支持spring MVC注解,可以像spring web一样使用。Feign也是声明式、模板化的HTTP客户端。在spring cloud 中使用Feign可以使用HTTP请求访问远程服务。就像调用本地方法一样,使开发者完成感知不到在调用。

二、实例

1、搭建注册中心:

 关于注册中心的搭建这里就不做详细的说明了,可以看我上一篇文章spring cloud搭建注册中心

2、调用客户端实例(我这里还整合了swagger2)新建producer-service项目

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</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-netflix-eureka-client</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- swagger -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>

</dependencies>

application.properties配置

#端口号
server.port=2000
##系统名称
spring.application.name=producer-service
#主机名,不配置的时候讲根据操作系统的主机名来获取
eureka.instance.hostname=127.0.0.1
##注册中心注册地址
eureka.client.service-url.defaultZone=http://127.0.0.1:1000/eureka/
eureka.instance.prefer-ip-address=true
ribbon.eureka.enabled=true
#开启健康检查
eureka.client.healthcheck.enabled=true
#租期到期时间,默认90秒
eureka.instance.lease-expiration-duration-in-seconds=30
#租赁更新时间间隔,默认30,即30秒发送一次心跳
eureka.instance.lease-renewal-interval-in-seconds=10
#虚拟主机名
eureka.instance.virtual-host-name=consumer-service
eureka.instance.instance-id=127.0.0.1:${server.port}
#访问swagger地址配置
eureka.instance.status-page-url=http://127.0.0.1:${server.port}/swagger-ui.html#

启动类:

@EnableFeignClients
@SpringBootApplication
public class ProducerServerApplication {

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

swagger2配置:

@Configuration
@EnableSwagger2
public class Swagger2Config {

    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.cn.producerserver.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("test 接口")
                .description("test")
                .termsOfServiceUrl("http://mychinalife.com.hk/")
                .contact("test")
                .version("1.0")
                .build();
    }
}

 

@RestController
@RequestMapping("/producer")
public class ProducerController {

    @Autowired
    private ConsumerServerFeignClient consumerServerFeignClient;

    @ApiOperation(value = "传单个参数")
    @GetMapping(value = "/findByName")
    public String findByName(String name) {
        return consumerServerFeignClient.findByName(name);
    }

    @ApiOperation(value = "对象参数")
    @PostMapping(value = "/addUser")
    public String addUser(@RequestBody User user){
        return consumerServerFeignClient.addUser(user);
    }

    @ApiOperation(value = "上传文件")
    @PostMapping(value = "/uploadFile")
    public String uploadFile(MultipartFile file){
        return consumerServerFeignClient.uploadFile(file);
    }

}

 

/**
 * @author zhouzenghui
 * @title: ConsumerServerFeignClient
 * @description: TODO 消费者 feign接口
 * @date 2020/6/4 16:01
 */
@FeignClient(value = "CONSUMER-SERVICE")
public interface ConsumerServerFeignClient {

    @GetMapping(value = "/consumer/findByName")
    String findByName(@RequestParam("name") String name);

    @PostMapping(value = "/consumer/addUser")
    String addUser(@RequestBody User user);

    @RequestMapping(method = RequestMethod.POST, value = "/consumer/uploadFile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String uploadFile(@RequestPart(value = "file") MultipartFile file);

}
public class User {

    private String name;

    private Integer age;

    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }


    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

2、服务提供实例新建producer-service项目

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</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-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.16</version>
    </dependency>
</dependencies>

application.properties配置

server.port=6000
#系统名称
spring.application.name=consumer-service
#主机名,不配置的时候讲根据操作系统的主机名来获取
eureka.instance.hostname=127.0.0.1
##注册中心注册地址
eureka.client.service-url.defaultZone=http://127.0.0.1:1000/eureka/
eureka.instance.prefer-ip-address=true
ribbon.eureka.enabled=true
#开启健康检查
eureka.client.healthcheck.enabled=true
#租期到期时间,默认90秒
eureka.instance.lease-expiration-duration-in-seconds=30
#租赁更新时间间隔,默认30,即30秒发送一次心跳
eureka.instance.lease-renewal-interval-in-seconds=10
#虚拟主机名
eureka.instance.virtual-host-name=consumer-service
eureka.instance.instance-id=127.0.0.1:${server.port}
#访问swagger地址配置
eureka.instance.status-page-url=http://127.0.0.1:${server.port}/swagger-ui.html#

 

@SpringBootApplication
public class ConsumerServerApplication {

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

}

 

@Slf4j
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @GetMapping(value = "/findByName")
    public String findByName(String name) {
        log.info("============={}==============", name);
        return "成功";
    }

    @PostMapping(value = "/addUser")
    public String addUser(@RequestBody User user) {
        log.info("{}", user.toString());
        return "成功";
    }

    @PostMapping(value = "/uploadFile")
    public String uploadFile(@RequestPart("file") MultipartFile file) {
        if (file == null) {
            return "失败";
        }
        log.info("文件名:{},大小size={}", file.getOriginalFilename(), file.getSize());
        return "成功";
    }
}

以上是Feign的一些简单使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值