OpenFeign之第一个Feign程序(十)

Feign简介

Feign是一个Java到HTTP客户端绑定器,它的灵感来自于Retrofit,JAXRS-2.0和WebSocket。Feign的主要目的是将绑定命名的复杂性降低到HTTP api不去考虑rest的复杂性。

Feign使用像Jersey和CXF这样的工具来编写Rest或SOAP服务的java客户端。此外,Feign允许您在诸如Apache HC这样的http库之上编写自己的代码。Feign将你的代码与http API连接起来,通过可定制的解码器和错误处理来将代码与http API连接起来,这些代码可以被写入任何基于文本的http API。

Feign的工作是将注释处理成一个临时的请求。在输出之前,参数以一种简单的方式应用于这些模板。尽管Feign仅限于支持基于文本的api,但它极大地简化了系统方面,比如重新播放请求。此外,Feign可以很容易地对你的转换进行单元测试。

更多讯息可以到feign的GitHub专栏查看。

创建一个简单的Feign程序

首先还是要从我们Spring Cloud服务管理框架Eureka简单示例(三)这篇文章底部拿到源代码,分别运行三个项目的**App类里面的main方法,看看是否能够正常运行,访问:http://localhost:8080/search/1,如果可以看到返回了Person类的id和name属性键值对,说明项目正常运行。

为了测试Feign访问简单的接口,我们在eureka-provider项目的ProviderController控制器的内部添加一个返回简单字符串的方法:

@RequestMapping(value = "/hello", method = RequestMethod.GET, 
		produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String hello(){
	return "hello world!";
}

然后重启eureka-provider项目,访问:http://localhost:8080/hello,浏览器可以返回简单字符串

创建一个新的简单java的maven项目feign-consumer,在pom.xml中引入feign的核心包:

<dependency>
	<groupId>io.github.openfeign</groupId>
	<artifactId>feign-core</artifactId>
	<version>9.7.0</version>
</dependency>

这里有可能openFeign在GitHub上提供的版本不是最新的,或者有其他出入的地方,我们可以去openFeign的maven仓库 获取这些依赖。

之后参照示例,我们先创建一个PersonClient的interface接口,并使用@RequestLine注解修饰我们的接口:

package com.init.springCloud;

import feign.RequestLine;

public interface PersonClient {

	@RequestLine("GET /hello")
	String toHello();
	
}

接着创建FeignTest类,测试用feign去访问eureka-provider提供的hello方法:

package com.init.springCloud;

import feign.Feign;

public class FeignTest {

	public static void main(String[] args) {
		//1.简单字符串返回值
		PersonClient client1 = Feign.builder()
				.target(PersonClient.class, "http://localhost:8080");
		String result = client1.toHello();
		System.out.println(result);
	}
	
}

运行main方法,可以看到feign已经去调用了我们的hello方法

为了能够看到feign去掉用返回实体的方法,我们在PersonClient接口中新添加一个接口:

@RequestLine("GET /search/{id}")
Person getPersonById(@Param("id") Integer id);

当然,为了返回实体类,也为了不和原来的方法耦合,我们新建一个Person类,

package com.init.springCloud;

import lombok.Data;

@Data
public class Person {

	private Integer id;			//主键ID
	private String name;		//姓名
	
}

这里使用了lombok,需要在pom.xml中添加依赖:

<!-- lombok代码模板解决方案 -->
<dependency>  
     <groupId>org.projectlombok</groupId>  
     <artifactId>lombok</artifactId>  
     <version>1.16.10</version>
</dependency>

同时,为了能够得到实体Person类,还需要用到Feign提供的一个Gson解码器,在pom.xml中引入依赖:

<dependency>
	<groupId>io.github.openfeign</groupId>
	<artifactId>feign-gson</artifactId>
	<version>9.7.0</version>
</dependency>

最后,在FeignTest中的main方法内编写测试代码:

//2.返回一个对象
PersonClient client2 = Feign.builder().decoder(new GsonDecoder())
		.target(PersonClient.class, "http://localhost:8080");
Person person = client2.getPersonById(1);
System.out.println(person);

运行main方法,看到控制台输出了Person类的信息:

到这里,我们也完成了feign的第一个程序

源码点击这里

最后,大家有什么不懂的或者其他需要交流的内容,也可以进入我的QQ讨论群一起讨论:654331206

Spring Cloud系列:

Spring Cloud介绍与环境搭建(一)

Spring Boot的简单使用(二)

Spring Cloud服务管理框架Eureka简单示例(三)

Spring Cloud服务管理框架Eureka项目集群(四)

Spring Cloud之Eureka客户端健康检测(五)

Netflix之第一个Ribbon程序(六)

Ribbon负载均衡器详细介绍(七)

Spring Cloud中使用Ribbon(八)

具有负载均衡功能的RestTemplate底层原理(九)

OpenFeign之第一个Feign程序(十)

OpenFeign之feign使用简介(十一)

Spring Cloud中使用Feign(十二)

Netflix之第一个Hystrix程序(十三)

Netflix之Hystrix详细分析(十四)

Spring Cloud中使用Hystrix(十五)

Netflix之第一个Zuul程序(十六)

Spring Cloud集群中使用Zuul(十七)

Netflix之Zuul的进阶应用(十八)

消息驱动之背景概述(十九)

消息中间件之RabbitMQ入门讲解(二十)

消息中间件之Kafka入门讲解(二十一)

Spring Cloud整合RabbitMQ或Kafka消息驱动(二十二)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【2021年,将Spring全家桶系列课程进行Review,修复顺序等错误。进入2022年,将Spring的课程进行整理,整理为案例精讲的系列课程,并新增高级的Spring Security等内容,通过手把手一步步教你从零开始学会应用Spring,课件将逐步进行上传,敬请期待】 本课程是Spring案例精讲课程的第四部分Spring Cloud,Spring案例精讲课程以真实场景、项目实战为导向,循序渐进,深入浅出的讲解Java网络编程,助力您在技术工作中更进一步。 本课程聚焦Spring Cloud的核心知识点:注册中心、服务提供者与消费者、服务的调用OpenFeign、Hystrix监控、服务网关gateway、消息驱动的微服务Spring Cloud Stream、分布式集群、分布式配置中心的案例介绍, 快速掌握Spring Cloud的核心知识,快速上手,为学习及工作做好充足的准备。 由于本课程聚焦于案例,即直接上手操作,对于Spring的原理等不会做过多介绍,希望了解原理等内容的需要通过其他视频或者书籍去了解,建议按照该案例课程一步步做下来,之后再去进一步回顾原理,这样能够促进大家对原理有更好的理解。【通过Spring全家桶,我们保证你能收获到以下几点】 1、掌握Spring全家桶主要部分的开发、实现2、可以使用Spring MVC、Spring Boot、Spring Cloud及Spring Data进行大部分的Spring开发3、初步了解使用微服务、了解使用Spring进行微服务的设计实现4、奠定扎实的Spring技术,具备了一定的独立开发的能力  【实力讲师】 毕业于清华大学软件学院软件工程专业,曾在Accenture、IBM等知名外企任管理及架构职位,近15年的JavaEE经验,近8年的Spring经验,一直致力于架构、设计、开发及管理工作,在电商、零售、制造业等有丰富的项目实施经验  【本课程适用人群】如果你是一定不要错过!  适合于有JavaEE基础的,如:JSP、JSTL、Java基础等的学习者没有基础的学习者跟着课程可以学习,但是需要补充相关基础知识后,才能很好的参与到相关的工作中。 【Spring全家桶课程共包含如下几门】 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值