Fingimiento de SpringCloud: cliente REST

En el clúster de Spring Cloud, la comunicación de cada rol se basa en el servicio REST. Al llamar al servicio, se requiere un cliente REST. Se usa comúnmente. Además de usar la RestTemplate propia de Spring, también puede usar otro cliente REST: Fingir.

Al usar Feign, puede usar sus propias anotaciones o anotaciones de terceros para modificar la interfaz, de modo que la interfaz tenga la capacidad de acceder al Servicio Web.
Feign también admite codificadores y decodificadores enchufables para encapsular y analizar solicitudes y respuestas de diferentes formas.
Spring Cloud integra Feign en el proyecto de Netflix. Cuando se integra con Eureka y Ribbon, Feign tiene la función de balanceo de carga.
Para ver ejemplos del uso de Feign en proyectos web de Spring Boot, consulte: " Spring Boot 2 Publish and Call REST Services "
 

El siguiente ejemplo es para usar en Spring Cloud.
Herramientas de desarrollo: IntelliJ IDEA 2019.2.3

Uno, lado del servidor

1. Crea un proyecto

Cree un nuevo proyecto SpringBoot en IDEA, el nombre es "spring-feign-server", la versión SpringBoot seleccione 2.1.10, en la selección de la interfaz Dependencias (dependencias), marque Spring Cloud Discovery ->
Eureka Server, cree el pom después de la finalización El archivo de configuración xml agrega automáticamente la última versión estable de SpringCloud como dependencia, actualmente Greenwich.SR3.
El contenido completo de pom.xml es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-feign-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-feign-server</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>

</project>

2. Modificar la configuración application.ym l

Modifique el número de puerto a 8761; cancele el registro de su información en el servidor de Eureka y no obtenga la información de registro del servidor de Eureka.

server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

3. Modifique el código de clase de inicio SpringFeignServerApplication.java

Agregar anotación @EnableEurekaServer

package com.example.springfeignserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class SpringFeignServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringFeignServerApplication.class, args);
    }
}

2. Proveedor de servicios

1. Crea un proyecto

Cree un nuevo proyecto SpringBoot en IDEA, excepto que el nombre es "spring-fing-provider", los otros pasos son los mismos que los de la creación del lado del servidor anterior.

2. Modifique la configuración application.yml

spring:
  application:
    name: spring-feign-provider
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

3. Agregue una clase de entidad User.javapackage com.example.springfeignprovider;

public class User {
String name;
Integer age;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

4. Modifique el código de clase de inicio SpringFeignProviderApplication.java

Agregue anotaciones @EnableEurekaClient y @RestController;
deje que la clase lea la entrada de la consola al inicio y decida qué puerto usar para iniciar el servidor;
agregue 2 métodos de controlador para probar.

package com.example.springfeignprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Scanner;

@SpringBootApplication
@EnableEurekaClient
@RestController
public class SpringFeignProviderApplication {

    public static void main(String[] args) {
        //SpringApplication.run(SpringFeignProviderApplication.class, args);
        Scanner scan = new Scanner(System.in);
        String port = scan.nextLine();
        new SpringApplicationBuilder(SpringFeignProviderApplication.class).properties("server.port=" + port).run(args);
    }

    @RequestMapping("/hello")
    public String hello(HttpServletRequest request) {
        return "hello world." + request.getServerPort();
    }

    @RequestMapping(value="/user/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
    public User user(@PathVariable String name) {
        User u = new User();
        u.setName(name);
        u.setAge(30);
        return u;
    }
}

Tres, la persona que llama al servicio

1.
Cree un nuevo proyecto SpringBoot en IDEA. El nombre es "spring-fing-invoker", y la versión SpringBoot es 2.1.10. Seleccione Spring Cloud Discovery -> Eureka Server, Spring Cloud en la interfaz de dependencias. Enrutamiento -> OpenFeign .
El contenido completo de pom.xml es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-feign-invoker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-feign-invoker</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>

</project>

2. Modifique la configuración application.yml

server:
  port: 9000
spring:
  application:
    name: spring-feign-invoker
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

3. Agregue una clase de entidad User.javapackage com.example.springfeigninvoker;

public class User {
String name;
Integer age;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

4. Agregue una interfaz de cliente UserClient.javapackage com.example.springfeigninvoker;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

//声明调用的服务名称
@FeignClient("spring-feign-provider")
public interface UserClient {
@RequestMapping(method = RequestMethod.GET, value = "/hello")
String hello();

@RequestMapping(method = RequestMethod.GET, value = "/user/{name}")
User getUser(@PathVariable("name") String name);
}

5. Modifique el código de la clase de inicio CloudInvokerApplication.java

Se agregaron anotaciones @EnableEurekaClient y @EnableFeignClients.

package com.example.springfeigninvoker;

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
@EnableEurekaClient
@EnableFeignClients
public class SpringFeignInvokerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringFeignInvokerApplication.class, args);
    }
}

6. Agregue el controlador InvokerController.java 

package com.example.springfeigninvoker;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Configuration
public class InvokerController {
    @Autowired
    private UserClient userClient;

    @RequestMapping(value = "/invokeHello", method = RequestMethod.GET)
    public String invokeHello(){
        return userClient.hello();
    }

    @RequestMapping(value = "/invokeUser", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public String invokeUser(){
        return userClient.getUser("小明").getAge().toString();
    }
}

Cuatro, prueba

1. Inicie el servidor.
El navegador visita http: // localhost: 8761 /, normal
2. Inicie los dos proveedores de servicios, ingrese 8080 y 8081 en la consola para comenzar.
(1) Visita del navegador http: // localhost: 8080 / user / Xiaoming
Salida: {"name": "Xiaoming", "age": 30}
(2) Visita del navegador http: // localhost: 8081 / user / Xiaoqiang
Salida : {"name": "Xiaoqiang", "age": 30}
3. Inicie la llamada de servicio.
(1) El navegador visita http: // localhost: 9000 / invokeHello, y la página muestra el cambio entre el puerto 8080 y 8081 a continuación:
hello world.8080
hello world.8081
(2) El navegador visita http: // localhost: 9000 / invokeUser, salida:
30

Supongo que te gusta

Origin blog.csdn.net/gdjlc/article/details/115007635
Recomendado
Clasificación