文档章节

(二)基于Spring Cloud Feign的客户端互相调用

Twelve_ZX
 Twelve_ZX
发布于 2017/04/07 16:09
字数 729
阅读 71
收藏 2

在我们将服务注册到Eureka服务器上之后,一个应用要调用另一个应用的服务。这个问题怎么解决。

我的场景如下

Eureka服务器 在本地 使用端口 8761

用例1:本地,使用端口8080 有一个greeting服务

用例2:本地,使用端口9000 有一个greeting服务

如何在用例1里面请求到用例2里面的greeting方法

首先想到的解决方案如下:

1:JDK原生 URLConnection。用这个我们通过Eureka获取Eureka提供了discoveryClient类,这个类通过getInstances(用例名)获取用例的详细信息和所需调用服务的域名,端口信息。获取这个信息之后拼接Url字符串。然后使用URLConnection去模拟请求.

2:Eureka给我们提供了一个解决方案 看如下代码:

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> resultStr=
        restTemplate.getForEntity("http://localhost:9000/greeting", String.class);
		System.out.println(resultStr.getBody());
		return resultStr.getBody();

我们可以使用RestTemplate去访问端口为9000的greeting方法,同样采用的是拼接URL的方法。结果如下:

3:那就是Spring Cloud Feign了。这个工具提供了非常完成的一套解决方案,我们只需要告诉他服务名/用例名 他就回去获取服务用例的对应的请求地址和端口,接下来我们具体的说一下这个调用

首先在用例1里面配置pom添加Feign的依赖包

<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 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zx</groupId>
  <artifactId>SpringCloudClient</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
    <relativePath/>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.7</java.version>
  </properties>

  <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-parent</artifactId>
            <version>Brixton.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
      <!--此处是差异所在-->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
       <!-- 客户端负载均衡jar包 -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
      </dependency>
      <!-- 跨服务请求 包 -->
      <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>

</project>

这个包加载之后,我们只需要创建一个接口类(interface)

在这个接口上面启用Feign。然后创建抽象方法,申明要调用的用例2里面的方法即可。代码如下:

package Controller;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient("TWO-CLOUD-CLIENT")//配置要请求的用例名,此名称和Eureka的名称一致
public interface getServerController {
    //申明调用方法,以及请求方式
	@RequestMapping(value = "/greeting",method = RequestMethod.GET)
    public  String getGreeting9000(@RequestParam("name") String name);//请求附带一个叫name的参数
}

这样写好之后,这个接口就会注册到Spring的Ioc中。后面我们可以直接使用这个接口调这个方法获取数据了

这个效果和上面使用Eureka的restTemple的效果一致。这样就完成了应用与应用之间的调用

© 著作权归作者所有

共有 人打赏支持
Twelve_ZX
粉丝 10
博文 24
码字总数 25863
作品 0
海淀
程序员
SpringCloud之声明式服务调用 Feign(三)

一 Feign简介 Feign是一种声明式、模板化的HTTP客户端,也是netflix公司组件。使用feign可以在远程调用另外服务的API,如果调用本地API一样。 我们知道,阿里巴巴的doubbo采用二进制的RPC协议...

07/13
0
0
【Spring Cloud】分布式必学springcloud(七)——声明式服务调用Feign

一、前言 在上篇博客中,小编带大家接触了断路器Hystrix,是不是很好玩。分布式服务之间有了Hystrix,可以很好的提高容错性能。 但是在实际开发中,项目中会有很多的服务间的调用,对于服务的...

kisscatforever
04/23
0
0
【Spring Cloud】分布式必学springcloud(一)——简介和看法

一、前言 开篇之前,我想说,springcloud会完胜dubbo。 小编以前做分布式是用的webservice、dubbo。最近的项目中,开始使用了springcloud,springcloud包含了很多的组件,这些组件是dubbo没有...

kisscatforever
04/16
0
0
springcloud使用feign实现服务间条用,参数数据太大,无法调用成功解决方法

公司项目做一个关于程序报错,实现给管理发送邮件提醒时使用springcloud的feign调用接口时总是走断路器 经过分析得出,调用接口时传递的参数过大,无法调用成功,解决方法如下: 1:引入spr...

你为什么不吃药
07/24
0
0
史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。...

方宏春
04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

此生1.3

颜值是开胃菜,不要太在意,正餐才是重点。

colinux
今天
1
0
[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
3
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
3
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
1
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部