上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。今天这一篇文章是系列教程中第五篇,也是对负载均衡的第二篇,主要对Spring Cloud Feign的实战。

本系列教程

【微服务】轻松搞定SpringCloud微服务目录

本系列为连载文章,阅读本文之前强烈建议您先阅读前面几篇。

Feign简介

Feign是一种声明式、模板化的HTTP客户端,也是netflix公司组件。使用feign可以在远程调用另外服务的API,如果调用本地API一样。

我们知道,阿里巴巴的doubbo采用二进制的RPC协议进行底层通讯,客户端可以使用类似本地方法一样调用。那么,虽然Feign同样可以有这种效果,但是底层还是通过HTTP协议调取restful的API的方式。

通过Feign, 我们能把HTTP远程调用对开发者完全透明,得到与调用本地方法一致的编码体验。

Spring Cloud Feign

开始起飞

起飞之前,先说明一下,本篇文章还是会在之前文章的源码继续。因此同样需要服务发现中心、服务配置中心、服务、客户端等微服务,因此沿用之前的项目中的子项目。

创建客户端服务

为了方便,可以直接复制上一片文章中的cloud-hyh-ribbon-test-client 子项目。并命名为新子项目。

配置客户端Pom文件

<dependencies>
<!--服务发现eureka组件 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!--web支持 依赖-->
<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>
</dependency>
<!--feign依赖 配置-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
</dependencies>
<!--构建-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

配置文件配置

对resources文件下配置文件进行配置。

eureka:
client:
service-url:
defaultZone: http://localhost:8081/eureka/
instance:
appname: feign-client server:
port: 8093 spring:
application:
name: ribbon-client

启动类编写

创建子包以后,创建主类FeignApplication.java


/**
* @Description :启动类,示范feign
* @Author hanyahong
* @Date 2017/12/10- 07:00
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignClientApplication {
public static void main(String[] args) {
SpringApplication.run(FeignClientApplication.class, args);
}
}

说明:

@EnableFeignClients :该注解是开启feign的扫描。

创建服务层

创建文件夹service ,然后创建TestService.java。

/**
* @Description :测试feign接口服务
* @Author hanyahong
* @Date 2017/12/10- 12:43
* <p>
* 通过在本服务的service层直接调用其他服务的api层的API接口进行相关操作。
* cloud-service 是一个简单服务,测试返回一个获取博客名称的接口。
*/ @FeignClient("cloud-service")
public interface TestService { /**
* 调取博客名称
*
* @return 博客名称
*/
@GetMapping("/ribbon/name")
String getBlogName();
}

说明:

@FeignClient 注解:就是你要调用的微服务接口所在的服务名。

比如A服务想调用B服务的服务。就要填写B服务的服务名。

@GetMapping注解:就是要调用的接口rest资源路径。

API层接口

我们将创建一个接口,暴露出去,可以调用刚才服务层的这个接口。

/**
* @Description :博客操作API,对外暴露
* @Author hanyahong
* @Date 2017/12/10- 12:53
*/
@RestController
@RequestMapping(value = "/feign")
public class BlogApi {
/**
* 注入服务层接口
*/
@Autowired
TestService testService; /**
* 通过Feign客户端的方式,调用之前一个服务的API
*
* @return
*/
@RequestMapping("/blogName")
public String getBlogNameByFeign() {
return "通过feign方式得到:" + testService.getBlogName();
}
}

目录参考

启动项目群并测试

启动注册中心、配置中心、两个相同配置服务、还有一个本文创建的客户端cloud-hyh-test-feign.

查看是否启动成功

访问注册中心,查看是否全部启动。

已经启动成功!

访问测试

访问地址http://localhost:8093/feign/blogName 路径,查看是否成功返回需要的数据。

结果显示:

通过feign方式得到:千万之路刚开始-www.hanyahong.com-beijing该服务器端口8072

源码

本文出处:http://www.hanyahong.com/

Github源码:https://github.com/hanyahong/spring-cloud-microservice

转发请注明出处!

【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign的更多相关文章

  1. 【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon

    对于任何一个高可用高负载的系统来说,负载均衡是一个必不可少的名称.在大型分布式计算体系中,某个服务在单例的情况下,很难应对各种突发情况.因此,负载均衡是为了让系统在性能出现瓶颈或者其中一些出现状态下可 ...

  2. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  3. 【微服务】之七:轻松搞定SpringCloud微服务-API权限控制

    权限控制,是一个系统当中必须的重要功能.张三只能访问输入张三的特定功能,李四不能访问属于赵六的特定菜单.这就要求对整个体系做一个完善的权限控制体系.该体系应该具备针区分用户.权限.角色等各种必须的功能 ...

  4. 【微服务】之二:从零开始,轻松搞定SpringCloud微服务系列--注册中心(一)

    微服务体系,有效解决项目庞大.互相依赖的问题.目前SpringCloud体系有强大的一整套针对微服务的解决方案.本文中,重点对微服务体系中的服务发现注册中心进行详细说明.本篇中的注册中心,采用Netf ...

  5. 【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心

    在整个微服务体系中,除了注册中心具有非常重要的意义之外,还有一个注册中心.注册中心作为管理在整个项目群的配置文件及动态参数的重要载体服务.Spring Cloud体系的子项目中,Spring Clou ...

  6. 从零开始,轻松搞定SpringCloud微服务系列

    本系列博文目录 [微服务]之一:从零开始,轻松搞定SpringCloud微服务系列–开山篇(spring boot 小demo) [微服务]之二:从零开始,轻松搞定SpringCloud微服务系列–注 ...

  7. 【微框架】之一:从零开始,轻松搞定SpringCloud微服务系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  8. 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  9. 带你十天轻松搞定 Go 微服务系列(二)

    上篇文章开始,我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分(本文) 用户服务 产品服务 订单服务 支付服务 RPC 服务 ...

随机推荐

  1. JqueryMobile基础之创建页面

    首先简答介绍一下JQueryMobile吧,我觉得用一句话来讲就是可以 "写更少的代码,做更多的事情" : 它可以通过一个灵活及简单的方式来布局网页,且兼容所有移动设备.这也是我自 ...

  2. 加载web项目时报的错误:Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul

    用eclipse开发的java项目不能加载到tomcat6.0服务器,原因是:jst.web的版本高了 <installed facet="jst.web" version= ...

  3. LeetCode 370. Range Addition (范围加法)$

    Assume you have an array of length n initialized with all 0's and are given k update operations. Eac ...

  4. Vue源码后记-更多options参数(1)

    我是这样计划的,写完这个还写一篇数据变动时,VNode是如何更新的,顺便初探一下diff算法. 至于vue-router.vuex等插件源码,容我缓一波好吧,vue看的有点伤. 其实在之前讲其余内置指 ...

  5. How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version

    ###############################   PART ONE   ############################### #1. Introduction of the ...

  6. web端/h5端账号密码的安全性问题

    firefox一直提示让浏览器记住密码会有安全问题,但是一直未曾关注过到底是什么安全问题. 国庆节回家后发生的一件小事,让我深刻认识到让浏览器记住密码有多么不安全. 事情的起因是这样,家里wifi信号 ...

  7. 【机器学习实战】第13章 利用 PCA 来简化数据

    第13章 利用 PCA 来简化数据 降维技术 场景 我们正通过电视观看体育比赛,在电视的显示器上有一个球. 显示器大概包含了100万像素点,而球则可能是由较少的像素点组成,例如说一千个像素点. 人们实 ...

  8. linux-touch

    linux-touch 用于创建文件或者更新文件的修改日期 命令参数 - d yyyymmdd:把文件的存取或修改时间改为  yyyy年mm月dd日 - a :只把文件的存取时间改成当前时间 - m: ...

  9. [java基础] java中的自动装箱与自动拆箱

    自动装箱的一个例子: Integer i = 1; //实际上是执行了Integer i = Integer.valueOf(1) 自动拆箱的一个例子: Integer a =1; int b = a ...

  10. Excel 生成SQL

    '"&A21&"'   Excel 中要做字符串连接 "& + 单元格地址 + &", 如果单纯做测试在某个单元格中测试输出内容 ...