No artigo anterior, podemos descobrir que, quando chamamos a API de outros serviços através do RestTemplate, os parâmetros necessários devem ser emendados no URL solicitado. Se houver menos parâmetros, podemos tolerá -lo. Uma vez que houver vários parâmetros, a união da sequência de solicitações será ineficiente e parecerá estúpida.
Então, existe uma solução melhor? A resposta é certa, e a Netflix nos forneceu uma estrutura: FEIGN.
A Feign é um cliente declarativo de serviço da web e seu objetivo é simplificar as chamadas de serviço da web. O Feign fornece um modelo para solicitações HTTP. Ao escrever interfaces simples e anotações de inserção, você pode definir os parâmetros, formatos, endereços e outras informações das solicitações HTTP.
O FEIGN irá completamente proxy solicitações HTTP e precisamos apenas chamá -lo de chamar um método para concluir a solicitação de serviço e o processamento relacionado. O Feign integra fita e hystrix (falaremos sobre o Hystrix mais tarde), para que não possamos mais usar esses dois componentes explicitamente.
Em resumo, Feign tem as seguintes características:
Isso se parece um pouco com o mapeamento de requestmapping da camada do controlador do nosso padrão SpringMVC. Esse padrão é algo que realmente gostamos. O Feign usa @FeignClient para mapear os serviços.
Primeiro, a primeira etapa é criar um novo módulo Feign na base original, depois introduzir dependências relacionadas e fingir dependências, que introduzirão automaticamente as dependências da Hystrix, da seguinte forma:
<Ependency> <GrupId> org.springframework.cloud </frupiid> <TRATIFACTID> Spring-cloud-starter-eureka </stutifactId> <versão> 1.3.5.Release </sistER> </dependency> <pendence> <purpid> org.springframework.cloud </clubid> ArtiftId> <pringa> org.springFramework.Cloud </clountid> <Versão> 1.4.0.Release </sipers> </pendence->
A configuração Application.yml é a seguinte:
Servidor: Porta: 8083Spring: Aplicativo: Nome: Feign-Consumereureka: Cliente: Serviço-URL: DefaultZone: http: // localhost: 8888/eureka/, http: // lochost: 8889/eureka/
Em seguida, no artigo anterior, vários novos métodos são adicionados ao serviço dois provedores1 e módulos de provedor2, conforme mostrado no código a seguir:
/*** Criado por Cong em 2018/5/8. */ @RestControllerPublic Classe Hellocontroller {@RequestMapping ("/hello") public String hello () {System.out.println ("O acesso vem 1 ..."); retornar "hello1"; } @RequestMapping ("/hjcs") Lista pública <String> laowangs (string IDS) {list <string> list = new ArrayList <> (); list.add ("laowang1"); list.add ("laowang2"); list.add ("laowang3"); lista de retorno; } // Método adicionado @RequestMapping (value = "/hellol", método = requestMethod.get) public string hello (@requestparam string nome) {return "hello" + name; } @ReQuestMapping (value = "/hello2", método = requestMethod.get) Public User Hello (@RequestHeader String Name, @RequestHeader Integer Age) {Retorne novo usuário (nome, idade); } @RequestMapping (Value = "/hello3", Method = requestMethod.post) public string hello (usuário do usuário do @RequestBody) {return "hello"+ usuário. getName () + "," + usuário. getage (); }}Em seguida, é a classe de usuário necessária para o código acima, o código é o seguinte:
/*** Criado por Cong 2017/12/2. */public class User {private String Name; idade inteira privada; // Deve haver um construtor vazio ao serializar a transmissão, caso contrário, ocorrerá um erro. public user () {} public user (nome da string, idade inteira) {this.name = name; this.age = idade; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public integer getage () {retorna idade; } public void setage (idade inteira) {this.age = Age; }}Em seguida, use o @FeignClient da Feign ("Nome do serviço") para mapear a chamada de serviço. O código é o seguinte:
pacote hjc; import org.springframework.cloud.netflix.feign.feignClient; importar org.springframework.web.bind.annotation.*;/*** criado por Cong em 2018/5/17. */// Configuration = xxx.class Esta classe configura algumas propriedades precisas de hystrix // value = "o nome do serviço que você usou" @feignClient (value = "hello-service", Fallback = FeignFallback.class) Public FeignSerice {// Mapping Path of Methodback.Class) @RequestMapping (value = "/hellol", método = requestMethod.get) string hello (@requestParam ("nome") nome da string); @RequestMapping (value = "/hello2", método = requestMethod.get) Usuário hello (@RequestHeader ("Nome") Nome da sequência, @RequestHeader ("Age") Idade inteira); @RequestMapping (value = "/hello3", método = requestMethod.post) String hello (usuário do usuário do @RequestBody);}Em seguida, injete a interface do Feiservice na camada do controlador para executar chamadas de serviço remoto. O código é o seguinte:
/*** Criado por Cong em 2018/5/17. */ @RestControllerPublic Classe ConsumerController {@AUTOWIRED FEIGNSERVICE FeignService; @RequestMapping ("/consumer") public string helloconsumer () {retorna feigService.hello (); } @ReQuestMapping ("/consumer2") public string hellocOnsumer2 () {string r1 = feignService.hello ("hjc"); String r2 = FeignService.Hello ("HJC", 23) .ToString (); String r3 = FeignService.Hello (novo usuário ("HJC", 23)); retornar r1 + "-----" + r2 + "----" + r3; }}Então, onde anotar o cliente Eureka na aula de inicialização do módulo Feign @enablediscoveryclient
@EnableFeignClients, o código é o seguinte:@SpringbootApplication@Enablediscoveryclient@EnableFeignClientspublic Classe FeignApplication {public static void main (string [] args) {springApplication.run (FeignApplication.class, args); }}Em seguida, inicie a aula de inicialização, digite localhost: 8083/consumidor no navegador, e o resultado em execução é o seguinte:
Você pode ver que a pesquisa de balanceamento de carga aparece Hello1 e Hello2.
Em seguida, continue entrando no localhost: 8083/consumer2 no navegador, e o resultado em execução é o seguinte:
Em seguida, usamos o rebaixamento do serviço sob o serviço de chamada declarativa Feign. Em seguida, devemos criar uma nova classe FeignFallback para herdar o Feiservice. O código é o seguinte:
pacote hjc; importar org.springframework.tereotype.component;/*** Criado por Cong em 2018/5/17. */ @ComponentPublic Class FeignFallback implementa FeigNService {// O método de implementação é um método de serviço de downgrade de chamada @Override public String hello () {return "Error"; } @Override public String hello (nome da string) {return "Error"; } @Override Public User Hello (nome da string, idade inteira) {return new User (); } @Override public String Hello (usuário do usuário) {return "Error"; }}Em seguida, paramos os dois módulos de módulos de provedor de serviços1 e os módulos do provedor2, e os resultados em execução são os seguintes:
Você pode ver que nossas chamadas tiveram todos os serviços rebaixados.
Então, se desejarmos controlar com precisão os parâmetros do Hystrix, por exemplo, os parâmetros combinados com o Hystrix, você pode configurar um atributo Configuration = xxx Class.class na anotação FeignClient para especificar as propriedades com precisão em que classe.
Ou configure -o no application.yml, como segue:
Hystrix: Comando: Padrão: Execução: Isolamento: Tópico: TimeoutInMillisEconds: 5000RIBBON: ConnectTimeout: 500 #Se você deseja configurar um serviço separado em detalhes, da seguinte
Isso satisfaz as chamadas da maioria dos nossos cenários, mas se você escrever cenários finos, ainda precisará usar a Hystrix nativa e seguir nosso uso anterior da Hystrix. Só não use as chamadas Feign Client, como segue:
/*** Criado por Cong em 2018/5/17. */classe pública HJCCommand estende HystrixCommand {protegido hjcCommand (HystrixCommandGroupKey Group) {super (grupo); } @Override Protected Object run () lança exceção {return null; }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.