资讯专栏INFORMATION COLUMN

史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)

0x584a / 2244人阅读

摘要:一简介是一个声明式的服务客户端,它使得写服务变得更简单。同时支持可插拔的编码器和解码器。对添加了支持,同时在中次用相同的。

转载请标明出处:
http://blog.csdn.net/forezp/a...
本文出自方志朋的博客

上一篇文章,讲述了通过restTemplate+ribbon去消费服务,这篇文章主要讲述通过feign去消费服务。

一、Feign简介

Feign是一个声明式的web服务客户端,它使得写web服务变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,包括Feign 注解和JAX-RS注解。Feign同时支持可插拔的编码器和解码器。Spring cloud对Spring mvc添加了支持,同时在spring web中次用相同的HttpMessageConverter。当我们使用feign的时候,spring cloud 整和了Ribbon和eureka去提供负载均衡。

简而言之:

feign采用的是接口加注解

feign 整合了ribbon

二、准备工作

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

三、创建一个feign的服务

创建一个spring-boot工程,取名为:serice-feign,它的pom文件为:



    4.0.0

    com.forezp
    service-feign
    0.0.1-SNAPSHOT
    jar

    service-feign
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.2.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
        
            org.springframework.cloud
            spring-cloud-starter-feign
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Dalston.RC1
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

    
        
            spring-milestones
            Spring Milestones
            https://repo.spring.io/milestone
            
                false
            
        
    





向服务注册中心注册它自己,这时service-ribbon既是服务提供者,也是服务消费者,配置文件application.yml

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

在程序的入口类,需要通过注解@EnableFeignClients来开启feign:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication {

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

定义一个feign接口类,通过@ FeignClient(“服务名”),来指定调用哪个服务:


/**
 * Created by fangzhipeng on 2017/4/6.
 */
@FeignClient(value = "service-hi")
public interface SchedualServiceHi {
    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    String sayHiFromClientOne(@RequestParam(value = "name") String name);
}

在web层的controllrt:

@RestController
public class HiController {

    @Autowired
    SchedualServiceHi schedualServiceHi;
    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    public String sayHi(@RequestParam String name){
        return schedualServiceHi.sayHiFromClientOne(name);
    }
}

访问http://localhost:8765/hi?name...浏览器交替显示:

hi forezp,i am from port:8762

hi forezp,i am from port:8763

四、更改feign的配置

在声明feignclient的时候,不仅要指定服务名,同时需要制定服务配置类:

@FeignClient(name = "stores", configuration = FooConfiguration.class)
public interface StoreClient {
    //..
}

重写配置,需要加@Configuration注解,并重写下面的两个bean,栗子:

@Configuration
public class FooConfiguration {
    @Bean
    public Contract feignContractg() {
        return new feign.Contract.Default();
    }

    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("user", "password");
    }
}

本文源码下载:
https://github.com/forezp/SpringCloudLearning/tree/master/chapter3

五、参考资料

spring-cloud-feign

优秀文章推荐:

史上最简单的 SpringCloud 教程 | 终章

史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69944.html

相关文章

  • 架构~微服务

    摘要:接下来继续介绍三种架构模式,分别是查询分离模式微服务模式多级缓存模式。分布式应用程序可以基于实现诸如数据发布订阅负载均衡命名服务分布式协调通知集群管理选举分布式锁和分布式队列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最简单的 SpringCloud 教程 | 第九篇: 服务链路追踪 (Spring Cloud Sleuth) 史上最简单的 S...

    xinhaip 评论0 收藏0
  • 架构~微服务 - 收藏集 - 掘金

    摘要:它就是史上最简单的教程第三篇服务消费者后端掘金上一篇文章,讲述了通过去消费服务,这篇文章主要讲述通过去消费服务。概览和架构设计掘金技术征文后端掘金是基于的一整套实现微服务的框架。 Spring Boot 配置文件 – 在坑中实践 - 后端 - 掘金作者:泥瓦匠链接:Spring Boot 配置文件 – 在坑中实践版权归作者所有,转载请注明出处本文提纲一、自动配置二、自定义属性三、ran...

    church 评论0 收藏0
  • 上最简单SpringCloud教程 | 第二篇: 服务费者(rest+ribbon)

    摘要:在服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于的。配置文件如下在工程的启动类中通过向服务中心注册并且注册了一个通过注册表明,这个是负载均衡的。 转载请标明出处: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 在上一篇文章,讲了服务的注册和发现。在服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http re...

    dreamans 评论0 收藏0
  • 上最简单SpringCloud教程 | 第四篇:断路器(Hystrix)

    摘要:为了保证其高可用,单个服务又必须集群部署。为了解决这个问题,就出现断路器模型。一断路器简介摘自官网已经创建了一个名为的库来实现断路器模式。较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用达到一个阀值是秒次断路器将会被打开。 转载请标明出处: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 在微服务架构中,我们将业务拆分成一个个的服务,...

    Hydrogen 评论0 收藏0
  • SpringCloud核心教程 | 三篇服务注册与发现 Eureka篇

    摘要:下一篇介绍基于的服务注册与调用。服务提供者工程配置这里服务提供者是使用之前进阶教程第三篇整合连接池以及监控改造而来,这里一样的部分就不再重复说明,下面将说明新增的部分。 Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分...

    scq000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<