博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-cloud Feign
阅读量:5101 次
发布时间:2019-06-13

本文共 4855 字,大约阅读时间需要 16 分钟。

在spring cloud体系中,各个微服务都是通过http接口的形式暴露自身服务的,因此在调用远程服务时需要用到http客户端。

Feign是一种声明式、模板化的HTTP客户端,在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。Feign和JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate类似,只是用起来更简单,优雅。

简单示例:

新建服务: feign-client

pom.xml 如下:

4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE
com.example
feign-client
0.0.1-SNAPSHOT
feign-client
Demo project for Spring Boot
1.8
Greenwich.RC2
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone

application.yml配置如下:

server:  port: 7003spring:  application:    name: feign-clienteureka:  client:    serviceUrl:      defaultZone: http://localhost:7000/eureka/  instance:    lease-expiration-duration-in-seconds: 2    #服务刷新时间配置,每隔这个时间会主动心跳一次    #默认30s    lease-renewal-interval-in-seconds: 1    #将ip注册到eureka server上而不是机器主机名    prefer-ip-address: true    #ip-address: 127.0.0.1    #InstanceId默认是${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}},    #也就是:主机名:应用名:应用端口    #通过instance-id 自定义ip+端口号    instance-id: ${spring.cloud.client.ipaddress}:${server.port}

这里需要用到eureka

通过@EnableFeignClients 开启Feign:

package com.example.feignclient;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication@EnableFeignClients@EnableEurekaClientpublic class FeignClientApplication {    public static void main(String[] args) {        SpringApplication.run(FeignClientApplication.class, args);    }}

为了让Feign知道在调用方法时应该向哪个地址发请求以及请求需要带哪些参数,我们需要定义一个接口

package com.example.feignclient;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;/** * Created by gexiaoshan on 2019/1/17. * Feign的客户端接口定义 */@FeignClient("eureka-discovery")public interface TestHttpClient {    @GetMapping("/test")    String test();}

@FeignClient用于通知Feign组件对该接口进行代理(不需要编写接口实现),使用者可直接通过@Autowired注入。

本列中"eureka-discovery" 是注册在eureka中的服务。

@GetMapping("/test") 表示在调用该方法时,向服务eureka-discovery的/test接口发出get请求。

新建一个测试controller:

package com.example.feignclient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * Created by gexiaoshan on 2019/1/15. */@RestControllerpublic class TestController {    @Autowired    TestHttpClient testHttpClient;    @RequestMapping("/test")    public String getTest(){        return testHttpClient.test();    }}

启动eureka-server, eureka-discovery ,feign-client。

测试:http://localhost:7003/test

返回:eureka-discovery

这里有个问题,在引jar时开始没有引入:

org.springframework.boot
spring-boot-starter-web
在启动时会自动关闭服务,至于为什么还有待研究。

 

gitHub : https://github.com/gexiaoshan518/spring-cloud.git

 

欢迎扫码交流:

 

转载于:https://www.cnblogs.com/gexiaoshan/p/10283510.html

你可能感兴趣的文章
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
收集WebDriver的执行命令和参数信息
查看>>
数据结构与算法(三)-线性表之静态链表
查看>>
mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
查看>>
Hmailserver搭建邮件服务器
查看>>
django之多表查询-2
查看>>
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>