Spring Cloud (7): simular chamada de interface declarativa

1. O que é Fingir

Feign também é para obter balanceamento de carga, mas seu uso é mais simplificado do que Ribbon.Na verdade, ele é encapsulado com base em Ribbon, para que possamos obter balanceamento de carga chamando a interface. Tanto o Feign quanto o Ribbon são fornecidos pela Netflix. O Feign é um cliente de Web Service declarativo e modelado, que simplifica a operação de desenvolvedores que escrevem clientes de Web Service. Os desenvolvedores podem chamar a API HTTP por meio de interfaces e anotações simples. Torne o desenvolvimento mais simplificado e rápido. O Spring Cloud Feign também é um desenvolvimento secundário baseado no Netflix Feign. Ele integra Ribbon e Hystrix e possui uma série de funções convenientes, como conectável, baseado em anotação, balanceamento de carga e fusão de serviço. Ou seja, podemos usar Feign em desenvolvimento real para substituir o Ribbon.
Comparado com Ribbon+RestTemplate, Feign simplifica muito o desenvolvimento de código. Feign suporta múltiplas anotações, incluindo anotações Feign, anotações JAX-RS, anotações Spring MVC, etc. .

2. A diferença entre Fita e Simulação

Ribbon é uma ferramenta de cliente HTTP comum, e Feign é implementado com base em Ribbon.

3. Vantagens de fingir

1. Feign é um cliente Web Service declarativo.

2. Suporta anotações Feign, anotações Spring MVC, anotações JAX-RS

3. A simulação é implementada com base na faixa de opções, que é mais conveniente de usar

4. Feign integra Hystrix e tem a função de fusão de serviço

Quatro, combate real!

  1. Crie um Módulo e configure o pom.xml da seguinte forma:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	<version>2.0.2.RELEASE</version>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
	<version>2.0.2.RELEASE</version>
</dependency>
  1. Crie um arquivo de configuração application.yml, a configuração é a seguinte:
server:
  port: 8050
spring:
  application:
    name: feign
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true
  1. Crie uma classe de inicialização com o seguinte código:
package com.zing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class FeignApplication {
    
    
	public static void main(String[] args) throws Exception {
    
    
		SpringApplication.run(FeignApplication.class, args);
	}

}
注解说明:

    * @EnableFeignClients:声明其为 Feign 客户端
  1. Crie uma interface declarativa, o código é o seguinte:
package com.zing.feign;

import java.util.Collection;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

import com.zing.entity.Student;

@FeignClient(value = "provider")
public interface IFeignService {
    
    
	
	@GetMapping("/student/findAll")
	public Collection<Student> findAll();
	
	@GetMapping("/student/index")
	public String index();
}

5. O código do manipulador é o seguinte:

package com.zing.controller;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.zing.entity.Student;
import com.zing.feign.IFeignService;

@RestController
@RequestMapping("/feign")
public class FeignHandler {
    
    

	@Autowired
	private IFeignService feignservice;
	
	@GetMapping("/findAll")
	public Collection<Student> findAll(){
    
    
		return feignservice.findAll();
	}
	
	@GetMapping("/index")
	public String index() {
    
    
		return feignservice.index();
	}
	
}
  1. Teste a função de balanceamento de carga de feign
    (1) inicie o centro de registro separadamente, dois provedores de serviços com portas diferentes, feign, a página do centro de registro é a seguinte:
    insira a descrição da imagem aqui
    (2) visite http://localhost:8050/feign/index várias vezes , podemos ver que os dois endereços de porta aparecem alternadamente prova que Feign alcançou o balanceamento de carga. Conforme mostrado na figura abaixo:
    insira a descrição da imagem aqui
    insira a descrição da imagem aqui
    7. Teste o mecanismo de fusíveis do Feign
    (1) Paramos todos os provedores de serviços primeiro, e apenas mantemos os serviços do centro de registro e Feign, e abrimos o centro de registro conforme mostrado na figura abaixo: ( 2
    insira a descrição da imagem aqui
    ) Visite http://localhost:8050 novamente /feign/index Você pode ver o conteúdo na figura a seguir:
    insira a descrição da imagem aqui
    (3) Para não expor diretamente a mensagem de erro, precisamos adicionar um mecanismo de fusível de serviço, modificar application. yml da seguinte forma:
server:
  port: 8050
spring:
  application:
    name: feign
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true
feign:
  hystrix:
    enabled: true

Instruções de configuração:

  • feign.hystrix.enable: Se habilitar o mecanismo de fusível, o padrão é falso.

(4) Crie a classe de implementação FeignServiceImpl de IFeignService, defina nela o mecanismo de processamento tolerante a falhas e injete a instância FeignServiceImpl no contêiner IOC por meio da anotação @Component. O código é o seguinte:

package com.zing.feign.impl;

import java.util.Collection;

import org.springframework.stereotype.Component;

import com.zing.entity.Student;
import com.zing.feign.IFeignService;

@Component
public class FeignServiceImpl implements IFeignService{
    
    

	@Override
	public Collection<Student> findAll() {
    
    
		return null;
	}

	@Override
	public String index() {
    
    
		return "服务器维护中。。。";
	}

}

(5) Defina o atributo de fallback de @FeignClient na definição de interface de IFeignService para processamento de downgrade, defina o mapeamento e mapeie-o para FeignServiceImpl. Depois de modificar IFeignService, o código é o seguinte:

package com.zing.feign;

import java.util.Collection;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

import com.zing.entity.Student;
import com.zing.feign.impl.FeignServiceImpl;

@FeignClient(value = "provider",fallback = FeignServiceImpl.class)
public interface IFeignService {
    
    
	
	@GetMapping("/student/findAll")
	public Collection<Student> findAll();
	
	@GetMapping("/student/index")
	public String index();
}

(6) Repita as etapas (1) e (2) e a seguinte interface aparecerá, o que prova que o mecanismo do fusível de serviço funciona. Como mostrado na imagem:
insira a descrição da imagem aqui

V. Resumo

Neste código, usamos Feign para obter balanceamento de carga e fusão de serviço. Depois de entender a configuração do Feign e os princípios básicos de seu uso, vamos estudar cuidadosamente o mecanismo de tolerância a falhas do Hystix. Vamos aguardar o próximo artigo Spring Cloud (8): Hystix Fault Tolerance Mechanism .

Um engenheiro de desenvolvimento também está em estágio de aprendizado contínuo, e as pequenas experiências usuais são compartilhadas de tempos em tempos. Espero que quem ler o texto que escrevi evite desvios e desejo sucesso no trabalho e nos estudos.
Os blogueiros têm experiência limitada, se houver alguma deficiência, seja bem-vindo para se comunicar e melhorar juntos ~ Espero progredir junto com você que também está no CSDN.

Autor | Batata Doce
Produzida | Batata Doce

Acho que você gosta

Origin blog.csdn.net/qq_36836370/article/details/130901115
Recomendado
Clasificación