Abertura
Este exemplo é baseado no Springboot que integrava o banco de dados de memória H2, realizando testes de unidade e independentes do banco de dados e usando Resttemplate para consumir o serviço RESTful da Spring Boot.
No exemplo de serviço RESTful que usa Resttemplate para consumir a inicialização da mola, mencionamos que, ao chamar o serviço de inicialização da mola, o URL de serviço precisa ser gravado no arquivo de configuração, mas não importa quais desses dois métodos, uma vez que o endereço IP muda, o programa precisa ser alterado e o serviço é reimplementado. Esse problema pode ser efetivamente evitado ao usar fita.
Prefácio:
Existem duas maneiras de implementar o balanceamento de carga suave, ou seja, o balanceamento de carga no servidor e o balanceamento de carga no cliente.
Balanceamento de carga do lado do servidor: Quando o navegador emite uma solicitação para o plano de fundo, ele enviará uma solicitação para o servidor proxy reverso. O servidor proxy reverso decidirá qual servidor enviar uma solicitação com base no IP: tabela de mapeamento de porta e política de balanceamento de carga implantada pelo cliente. Geralmente, a tecnologia de proxy reversa Nginx é usada.
Balanceamento de carga do cliente: Quando o navegador faz uma solicitação para o plano de fundo, o cliente puxará as informações de serviço disponíveis registradas no servidor para o registrante de serviço (por exemplo: Eureka Server) e, em seguida, pressione diretamente qual servidor para enviar a solicitação de acordo com a política de balanceamento de carga. Todo esse processo é feito no lado do cliente e não requer a participação do servidor proxy reverso.
1. Iniciar o servidor Eureka
Consulte este exemplo: Iniciar o servidor Eureka na nuvem da primavera
2. Inicie o microsserviço e registre -se no Servidor Eureka
Spring Cloud - Registre o serviço de inicialização da primavera no servidor Eureka
Para demonstrar o efeito do balanceamento de carga, inicie outro serviço, observe que o número da porta precisa ser alterado para inconsistente
3. Adicione o suporte da fita
1. Adicione as dependências da Ribbon
2. Adicione suporte de balanceamento de carga
pacote com.chhliu.springboot.restful; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.boot.springApplication; importar org.springframework.boot.autoconfigure.springbootApplication; importar org.springframework.boot.web.client.resttemplatebuilder; importar org.springframework.cloud.client.loadBalancer.loadBalanced; importar org.springframework.cloud.netflix.eureka.enableeurekaclient; importar org.springframework.context.annotation.bean; importar org.springframework.web.client.resttemplate; @SpringbooTApplication @enableeurekaclient Classe pública SpringbootrestTemplateApplication {@AUTOWIRED PRIVADO RESTTEMPLATEBUILLER Builder; @Bean @loadBalanced // Adicionar suporte de balanceamento de carga é muito simples. Você só precisa adicionar a anotação @loadBalanced ao RestTemplate. Em seguida, o RestTemplate tem a função do balanceamento de carga. Se a anotação @loadBalanced não for adicionada, será relatada uma exceção java.net.unknownhosception: springboot-h2. No momento, o serviço não pode ser chamado registrando o nome de serviço no servidor Eureka, porque o Resttemplate não pode mapear do nome do serviço para IP: Port, e a função de mapeamento é implementada pelo LoadBalancerclient. public RestTemplate RestTemplate () {return Builder.build (); } public static void main (string [] args) {springapplication.run (springbootresttemplateApplication.class, args); }} 3. Modifique o URL do microsserviço de chamada
pacote com.chhliu.springboot.restful.controller; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.web.bind.annotation.getMapping; importar org.springframework.web.bind.annotation.pathvariable; importar org.springframework.web.bind.annotation.restcontroller; importar org.springframework.web.client.resttemplate; importar com.chhliu.springboot.restful.vo.user; @RestController Classe public RestTemplateController {@AUTOWIRed Private Resttemplate Resttemplate; @GetMapping ("/model/{id}") public user findbyid (@pathvariable iD longo) {// altere o formulário IP original: porta para o nome do aplicativo registrado no servidor eureka user u = this.resttemplate.getForObject ("http: // springboot-h2/user/" + id, user.class); System.out.println (u); devolver u; }}4. Verifique o status do servidor Eureka
5. No navegador, atualize o http: // localhost: 7904/modelo/2 endereço muitas vezes
6. Resultados dos testes
7900 Serviço de porta:
Hibernate: selecione User0_.id como ID1_0_0_, User0_.age como Age2_0_0_, User0_.Balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como username5_0_0_ de usuário de user0_ onde user0_.id =? Hibernate: selecione User0_.id como ID1_0_0_, User0_.age como Age2_0_0_, User0_.Balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como username5_0_0_ de usuário de user0_ onde user0_.id =? Hibernate: selecione User0_.id como ID1_0_0_, User0_.age como Age2_0_0_, User0_.Balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como username5_0_0_ de usuário de user0_ onde user0_.id =? Hibernate: selecione User0_.id como id1_0_0_, user0_.balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como userName5_0_0_ do usuário user0_ where user0_.id =?
7901 Serviço de porta:
Hibernate: selecione User0_.id como ID1_0_0_, User0_.age como Age2_0_0_, User0_.Balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como username5_0_0_ de usuário de user0_ onde user0_.id =? Hibernate: selecione User0_.id como ID1_0_0_, User0_.age como Age2_0_0_, User0_.Balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como username5_0_0_ de usuário de user0_ onde user0_.id =? Hibernate: selecione User0_.id como ID1_0_0_, User0_.age como Age2_0_0_, User0_.Balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como username5_0_0_ de usuário de user0_ onde user0_.id =? Hibernate: selecione User0_.id como id1_0_0_, user0_.balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como userName5_0_0_ do usuário user0_ where user0_.id =? Hibernate: selecione User0_.id como ID1_0_0_, User0_.age como Age2_0_0_, User0_.Balance como balance3_0_0_, user0_.name como name4_0_0_, user0_.username como username5_0_0_ de usuário de user0_ onde user0_.id =?
7904 Serviço de porta:
Usuário [id = 2, nome de usuário = user2, nome = li si, idade = 20, equilíbrio = 100,00] 2017-01-23 09: 58: 05.682 INFO 7436 --- [ErlistupDater-0] C.NETFLIX.CONFIG.CHINEINDDYDYDYPRONGRONDROPRONERTION: PROPRIEDADE DO SPORTOT-HENDERY-HONDRIBBON.CONFIG.CHINEINDDYDYDYDYTRONGRONGROND: niws.loadBalancer.AvailabilityFilteringRule.ActiveConnectionslimit = 2147483647 Usuário [ID = 2, nome de usuário = User2, nome = li si, idade = 20, balanço = 100.00] User [id = 2, usuário de usuário = usuário2, nome = us si, idade = 20.00] usuário [id = 2, usuário do usuário = user2, name = us si, idade = 20.00]; Balance = 100,00] Usuário [ID = 2, nome de usuário = User2, Nome = Li Si, Idade = 20, Balanço = 100,00] Usuário [ID = 2, Nome de usuário = User2, Nome = Li Si, Age = 20, Balance = 100.00] User [ID = 2, Username = User2, Nome = Li Si, Age = 20, Balance = 100.00] Balance = 100,00] Usuário [ID = 2, nome de usuário = User2, Nome = Li Si, idade = 20, Equilíbrio = 100,00]
A partir dos resultados dos testes acima, podemos ver que um total de 7904 serviços de porta foram ajustados 9 vezes, dos quais 7904 serviços de porta foram ajustados 4 vezes e 7901 portas foram ajustadas 5 vezes, o que foi exatamente 9 vezes.
Após as etapas acima, a fita é basicamente usada para realizar a função de balanceamento de carga do cliente.
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.