Introdução à fita
Em um sistema distribuído, cada microsserviço implantará várias instâncias. Como distribuir uniformemente os consumidores de serviços para várias instâncias de provedores de serviços requer o uso de balanceadores de carga.
A fita é um balanceador de carga, que fornece muitos algoritmos de balanceamento de carga, como a pesquisa e, depois de configurar o endereço do provedor de serviços, as solicitações do consumidor de serviço podem ser distribuídas uniformemente.
Integrar a fita para servir os consumidores
Adicionar biblioteca de dependência da fita
<Depencency> <PuerpId> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-starter-ribbobn </ArtifactId> </dependency>
Adicione @loadbalaced Anotation ao Resttemplate para integrar Resttemplate e Ribbon
@Bean@loadBalancedPublic Resttemplate RestTemplate () {return new Resttemplate ();}Modifique o controlador e modifique o endereço de solicitação para http: // flim-user/user/. Quando o Ribbon e o Eureka são usados juntos, o nome do host virtual será mapeado automaticamente para o endereço de rede do microsserviço, e o loadBalancerclient é injetado para produzir o nó de microsserviço atualmente selecionado.
@RestControllerPublic Class MovieController {private final Logger Log = LoggerFactory.getLogger (MovieController.class); @Autowired Private Resttemplate Resttemplate; @AUTOWIRED PRIVADO LOADBALANCERCLIENT LOUTBALANCERCLIENT; @GetMapping ("/user/{id}") public user findbyId (@pathvariable int id) {return this.resttemplate.getForObject ("http: // flim-user/"+id, user.class); } @GetMapping ("/log-Instance") public void LogInstance () {ServiceInstance ServiceInstance = this.loadBalancerclient.choose ("Flim-user"); log.info ("{}: {}: {}", serviceInstance.getServiceId (), ServiceInstance.gethost (), ServiceInstance.getport ()); }}Execute o programa de teste
{"ID": 1, "Nome de usuário": "Account1", "Nome": "Zhang San", "Age": 20, "Balance": 100,00}
As seguintes informações serão emitidas ao acessar o http: // localhost: 8010/log-Instance várias vezes.
Você pode ver que as solicitações serão distribuídas uniformemente aos dois microsserviços do usuário
2017-12-17 20: 47: 53.975 Informações 12313 --- [nio-8010-Exex-2] com.linyuan.controller.movieController: Flim-user: LinyuandaMBP: 8764
2017-12-17 20: 47: 54.215 Informações 12313 --- [nio-8010-exex-1] com.linyuan.controller.movieController: Flim-user: Linyuandembp: 8763
2017-12-17 20: 47: 54.445 Informações 12313 --- [nio-8010-exex-3] com.linyuan.controller.movieController: Flim-user: LinyuandEmbp: 8764
2017-12-17 20: 47: 54.690 INFO 12313 --- [NIO-8010-EXEC-4] com.linyuan.controller.MovieCOntroller: Flim-user: LinyuandEmbP: 8763
2017-12-17 20: 47: 54.935 Informações 12313 --- [nio-8010-exex-5] com.linyuan.controller.movieController: Flim-user: LinyuandEmbp: 8764
Nota: RestTemplate.getForObject (...) e LoadBalancerclient.Choose (...) não podem ser gravados no mesmo método, porque o Rest-Template é na verdade um cliente de faixa de opções e já contém o comportamento "Escolha".
Configurando a fita por código
Você pode usar o código Java ou atributos para personalizar a configuração da fita. A classe de configuração padrão de fita é o RibBonClientConfiguration ou você pode usar um pojo para personalizar a configuração da fita. Esta configuração é fina. Diferentes clientes de fita podem usar configurações diferentes.
Crie uma classe de configuração de fita
/*** Esta classe é uma classe de configuração* não deve ser digitalizada por componentsCan*/ @ConfigurationPublic Class RibbonConfiguration {@Bean public irule ribbonRule () {// Regras de balanceamento de carga de configuração, mude para retornar aleatório novo RandomRule (); }}Especifique as classes de configuração para provedores de serviços usando a anotação @RibBonClient ou @RibBonliients
@SpringboOTApplication @Enablediscoveryclient @ribbonClient (name = "Flim-user", Configuration = ribbonConfiguration.class) classe public FlimConsumerApplication {@Bean @loadBalanced public Resttemplate Resttemplate () {Return Resttemplate (); } public static void main (string [] args) {springapplication.run (flimconsumerapplication.class, args); }}Visite o endereço de teste http: // localhost: 8010/log-Instance e você pode ver que a solicitação será distribuída aleatoriamente em dois microsserviços.
2017-12-17 21: 08: 52.769 Info 12524 --- [NIO-8010-EXEC-7] com.linyuan.controller.MovieCOntroller: Flim-user: LinyuandEmbp: 8763
2017-12-17 21: 08: 52.946 INFO 12524 --- [NIO-8010-EXEC-8] com.linyuan.Controller.MoVieCOntroller: Flim-user: LinyuandEmbP: 8763
2017-12-17 21: 08: 53.138 Info 12524 --- [nio-8010-exex-9] com.linyuan.controller.movieController: Flim-user: LinyuandEmbp: 8763
2017-12-17 21: 08: 53.319 INFO 12524 --- [io-8010-Exex-10] com.linyuan.controller.movieController: Flim-user: LinyuandEmbP: 8764
2017-12-17 21: 08: 53.511 Info 12524 --- [NIO-8010-EXEC-1] com.linyuan.controller.movieController: Flim-User: Linyuandembp: 8763
NOTA: A classe RibbonConfiguration não pode ser digitalizada pelo @ComponentsCan, caso contrário, as informações de configuração serão compartilhadas por todo o @RIBBONCLIENT. Portanto, se você deseja personalizar apenas a configuração de um determinado cliente da fita, deve impedir que ele seja digitalizado por @ComponentsCan.
Configurar a faixa de opções no arquivo de configuração
A personalização das propriedades da faixa de opções por meio de arquivos de configuração é mais conveniente, e o prefixo de configuração é <Stername> .RIBBON.
Defina a configuração da fita através de arquivos de configuração
Flim-User: Ribbon: nfloadBalancerleClassName: com.netflix.loadbalancer.randomrule
Configuração global de fita comumente usada
Fita: ConnectionTimeout: #Connection Timeout ReadTimeout: #Read Timeout OkTetryOnAllOperToTions: #Retry Todas as solicitações de operação
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.