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!
- 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>
- 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
- 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 客户端
- 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();
}
}
- 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:
(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:
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
) Visite http://localhost:8050 novamente /feign/index Você pode ver o conteúdo na figura a seguir:
(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:
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