【Spring Cloud 系列】三、服务消费者(Feign)(Hoxton.M3 版本)
【摘要】 环境:IDEAJDK1.8Spring Cloud Hoxton.M3Spring Boot 2.2.0 一、Feign简介 Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息,而Feign则会完全代理HTTP请求,我们只需...
环境:
IDEA
JDK1.8
Spring Cloud Hoxton.M3
Spring Boot 2.2.0
一、Feign简介
Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息,而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix。
总起来说,Feign具有如下特性:
- 可插拔的注解支持,包括Feign注解和JAX-RS注解;
- 支持可插拔的HTTP编码器和解码器;
- 支持Hystrix和它的Fallback;
- 支持Ribbon的负载均衡;
- 支持HTTP请求和响应的压缩。
FeignClient注解的一些属性
- value:默认值为空字符串,主要作用调用服务名称,和name属性相同
- serviceId:默认值为空字符串,主要作用服务id,作用和name属性相同
- name:默认值为空字符串,主要作用调用服务名称,和value属性相同
- url:默认值为空字符串,主要作用全路径地址或hostname,Http或Https可选
- decode404:默认值为false,主要作用配置响应状态码为404时是否应该抛出FeignExceptions
- configuration:默认值为{},主要作用自定义当前feign client的一些配置
- fallback:默认值为void.class,主要作用熔断机制,调用失败时,回退方法,可以用来抛出异常或给出默认返回数据。
- path:默认值为空字符串,主要作用自动给所有方法的requestMapping前加上前缀,类似与controller类上的requestMapping
二、创建项目
1、File ----- New -----Project
2、Spring Initializr ----- Next
3、输入 Group 和 Artifact,点击 Next
4、选择Spring cloud Discovery -----Eureka Discovery Client---- Next
5、创建完成 点击 Finish 则在新窗口打开新建的工程
三、完善项目
1、由于刚刚创建的文件是初始化默认的项目,需要添加相应注解和配置文件。具体详情如下:
a.Eureka的依赖spring-cloud-starter-eureka
<!-- spring-cloud-starter-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
b.Feign的依赖spring-cloud-starter-feign
<!-- spring-cloud-starter-feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
c.Web的依赖spring-boot-starter-web
<!-- spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、ClientserverApplication.java添加注解@EnableEurekaClient
3、完善配置文件application.properties 需要制定应用名称,应用名称为:Client_Server1
#服务的端口
server.port=8762
#注册到服务中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#是否注册到eureka服务器,
eureka.client.registerWithEureka=true
#是否从eureka服务器获取注册信息
eureka.client.fetchRegistry=true
#是否开启自我保护模式,默认为true。
eureka.server.enable-self-preservation=true
#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka.server.eviction-interval-timer-in-ms=10000
spring.application.name=Client-Server1
4、创建ClientController
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by 公众号:Java全栈架构师
*/
@RestController
public class ClientController {
@RequestMapping("/test")
// @ResponseBody
public String test(@RequestParam String name){
return "Hello World!==port:8762==="+name;
}
}
四、运行项目
1、进入FeignclientserverApplication.java 启动类,右击选择Run
2、进入服务注册中心:
http://localhost:8761/ 显示服务已经注册成功(显示两个服务,是由于把其中一个复制了一下,修改端口号:8763,两个Feign项目所以就显示两个。)
3、输入http://localhost:8762/test?name=123
返回数据如下:
Hello World!port:8762=123
4、最后上一张启动三个服务的图:
五、项目代码
1、pom.xml
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.mcus</groupId>
<artifactId>feignclientserver1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>feignclientserver</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.M3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- spring-cloud-starter-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- spring-cloud-starter-feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!-- spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
2、application.properties文件
server.port=8762
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#是否注册到eureka服务器,
eureka.client.registerWithEureka=true
#是否从eureka服务器获取注册信息
eureka.client.fetchRegistry=true
#是否开启自我保护模式,默认为true。
eureka.server.enable-self-preservation=true
#续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka.server.eviction-interval-timer-in-ms=10000
spring.application.name=Client-Server1
3、ClientserverApplication.java
package cn.java;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* Created by 公众号:Java全栈架构师
*/
@SpringBootApplication
@EnableEurekaClient
public class ClientserverApplication {
public static void main(String[] args) {
SpringApplication.run(ClientserverApplication.class, args);
}
}
4、Controller
package cn.scpro.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by 公众号:Java全栈架构师
*/
@RestController
public class ClientController {
@RequestMapping("/test")
// @ResponseBody
public String test(@RequestParam String name){
return "Hello World!==port:8762==="+name;
}
}
结语
好了,以上就是服务消费者(Feign)(Hoxton.M3 版本),感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】欢迎关注阅读交流。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)