【微服务架构】SpringCloud之Feign(五)

Feign简介

Feign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign.

声明式REST客户端:Feign

先要启动eureka_register_service工程(注册中心)和biz-service-0工程(服务生产者)

创建一个maven工程eureka_feign_client

pom.xml

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Brixton.SR5</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
    </dependencies>
</dependencyManagement>

在应用主类中通过@EnableFeignClients注解开启Feign功能

启动文件FeignApplication.java

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {

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

}

定义服务接口类UserClient.java

使用@FeignClient("biz-service-0")注解来绑定该接口对应biz-service-0服务

@FeignClient("biz-service-0")
public interface UserClient {

    @RequestMapping(method = RequestMethod.GET, value = "/getuser")
    public User getuserinfo();
    
    @RequestMapping(method = RequestMethod.GET, value = "/getuser")
    public String getuserinfostr();
    
    @RequestMapping(method = RequestMethod.GET, value = "/info")
    public  String  info();

}

在web层中调用上面定义的UserController,具体如下

@RestController
public class UserController {

    @Autowired
    UserClient userClient;

    @RequestMapping(value = "/getuserinfo", method = RequestMethod.GET)
    public User getuserinfo() {
        return userClient.getuserinfo();
    }
    
    @RequestMapping(value = "/getuserinfostr", method = RequestMethod.GET)
    public String getuserinfostr() {
        return userClient.getuserinfostr();
    }
    
    @RequestMapping(value = "/info", method = RequestMethod.GET)
    public String info() {
        return userClient.info();
    }

}

application.properties配置变量

spring.application.name=feign-consumer
server.port=8004
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

访问 http://127.0.0.1:8004/getuserinfo

总结:

其实通过Feign封装了HTTP调用服务方法,使得客户端像调用本地方法那样直接调用方法,类似Dubbo中暴露远程服务的方式,区别在于Dubbo是基于私有二进制协议,而Feign本质上还是个HTTP客户端

时间: 2024-11-10 13:44:39

【微服务架构】SpringCloud之Feign(五)的相关文章

微服务架构 SpringCloud(一)组件和概念介绍

一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯.它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩. 微服务架构需要的功能或使用场景 1:我们把整个系统根据业务拆分成几个子系统. 2:每个子系统可以部署多个应用,多个应用之间使用负载均衡. 3:需要一个服务注册中心,所有的服务都在注册中心注册

企业应用架构之微服务架构

微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境. 本文将介绍微服务架构的演进.优缺点和微服务应用的设计原则,然后着重介绍作为一个"微服务应用平台"需要提供哪些能力.解决哪些问题才能更好的支撑企业应用架构. 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以SpringCloud为基础,结合了普元多年来对企业应用的理解和产品的设计经验,逐步孵化的一个微服务应用平台. 目录:

springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

参考:springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin 原创 2017年09月18日 11:46:28 标签: 微服务架构 / 微服务组件 / eureka / ribbon / zuul 26459 springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin 相信现在

微服务架构之旅——《走进SpringCloud》

近十年国内互联网行业飞速发展,我们对软件系统的需求已经不再是过去"能用就行"这种很low的档次了,像618.双十一这样的活动 不断逼迫我们去突破软件系统的性能上限,传统的IT企业"能用就行"的开发思想已经不能满足互联网 高并发.大流量的性能要求 .系统架构 走向分布式 已经是服务器开发领域解决该问题唯一的出路,然而分布式系统由于天生的复杂度,并不像开发单体应用一样把框架一堆就能搞定,因此各大互联网公司都在投入技术力量研发自己的基础设施.这里面比较有名的如 阿里的开源

基于SpringCloud 微服务架构下 广告系统设计与实现

第1章 课程简介本章对这门课程进行说明,包括:广告系统的介绍.课程使用的技术介绍.课程的学习规划等. 第2章 广告系统概览与准备工作本章会介绍广告系统的思想.广告系统的技术实现架构.学习本课程之前的准备工作和广告系统的代码目录结构. 第3章 广告系统骨架开发广告系统使用SpringCloud微服务框架开发,并使用Maven做多模块管理.这一章完成项目骨架的开发,包括搭建注册中心和服务网关,同时也会对Maven的重要特性做介绍. 第4章 微服务通用模块开发本章实现广告系统微服务通用的功能,例如:统

Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们应该如何进行网络请求的优化与处理呢? 到底有没有一些好的建议与方案呢? 下面这个文章将揭晓上面的问题,让你对SpringCloud微服务网络请求性能有一个全新的认识. 目录简介 01.网络请求异常分类 02.开发中注意问题 03.原始的处理方式 04.如何减少代码耦合性 05.异常统一处理步骤 06

构建SpringBoot,SpringCloud微服务架构分布式电商项目实战

Spring Cloud 微服务总体架构图 上面图中技术名词理解: 1.Sleuth-链路跟踪 为服务之间调用提供链路追踪.通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长.从而让我们可以很方便的理清各微服务间的调用关系. 2.断路器(Hystrix) 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务通常会集群

springCloud进阶(微服务架构&amp;Eureka)

springCloud进阶(微服务架构&Eureka) 1. 微服务集群 1.1 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责均衡策略完成负载调用. 1.2 服务提供者集群-同一种服务(服务名)部署多个 实际生产就是同一种服务多部署几台服务器,开发时就是用端口来区分. 1) 拷贝一份8001 2) 修改主类-改名 3) 改8002yml,端口 4) 服务提供者 1.3 服务消费者负载均衡调用 1)常见的负载均衡技术 Ribbon

Spring Cloud构建微服务架构(五)服务网关

通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现:而服务间通过Ribbon或Feign实现服务的消费以及均衡负载:通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理.为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延. 在该架

【微服务架构】SpringCloud组件和概念介绍(一)

一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯.它们彼此相互协作,作为一个整体为用户提供功能,却可以独立地进行扩. 微服务架构需要的功能或使用场景 1:我们把整个系统根据业务拆分成几个子系统. 2:每个子系统可以部署多个应用,多个应用之间使用负载均衡. 3:需要一个服务注册中心,所有的服务都在注册中心注册