【Spring Cloud 系列】三、服务消费者(Feign)(Hoxton.M3 版本)

这是我参与更文挑战的第3天,活动详情查看: 更文挑战

环境:

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具有如下特性:

  1. 可插拔的注解支持,包括Feign注解和JAX-RS注解;
  2. 支持可插拔的HTTP编码器和解码器;
  3. 支持Hystrix和它的Fallback;
  4. 支持Ribbon的负载均衡;
  5. 支持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

1.jpg

2、Spring Initializr —– Next

2.jpg

3、输入 Group 和 Artifact,点击 Next

3.png

4、选择Spring cloud Discovery —–Eureka Discovery Client—- Next

4.jpg

5、创建完成 点击 Finish 则在新窗口打开新建的工程

5.jpg

6.jpg

三、完善项目

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

7.jpg

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;
    }

}

复制代码

8.jpg

四、运行项目

1、进入FeignclientserverApplication.java 启动类,右击选择Run

9.jpg

2、进入服务注册中心:

http://localhost:8761/ 显示服务已经注册成功(显示两个服务,是由于把其中一个复制了一下,修改端口号:8763,两个Feign项目所以就显示两个。)

10.jpg

3、输入http://localhost:8762/test?name=123

返回数据如下:

11.jpg
Hello World!port:8762=123

4、最后上一张启动三个服务的图:

12.png

五、项目代码

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;
    }

}
复制代码

  以上就是一个Spring Cloud 的服务消费者(Feign)的创建过程。欢迎交流学习。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享