[RESOLVIDO] - Módulos do Zuul, Hystrix e Ribbon descontinuados

Olá Experts, tudo bem?

Estou fazendo um projeto no STS e ele precisa do Ribbon, mas pelo que pesquisei ele foi descontinuado, tentei até alterar ao POM.xml para versão antetiror:
Alterando para: <version>2.3.4.RELEASE</version>:

Porém, não dá a opção de criar o projeto Spring em versões menores que a a 2.4.X. Pois não reconhece:

No Forum da pesquisa, dá até uma via de solução, porém não é mostrado como é feito:

Como é possível resolver esta situação?

Agradeço todo auxilio

No caso do ribbon, parece que a orientação é usar um tal de Spring Cloud LoadBalancer (digo assim pois não conhecia ele até agora, qdo fui pesquisar).

FONTE: https://spring.io/guides/gs/client-side-load-balancing/ (veja o link guide do deste bem no começo da página)

Caramba, até sabia que alguns componentes do netflix deixaram de ser suportados pelo spring cloud, mas não sabia que o ribbon também já estava depreciado.

Obrigado Lucas pela direção!
Dei uma lida na Guides: https://spring.io/guides/gs/spring-cloud-loadbalancer/ e vou realizar no código a orientação, retorno aqui o resultado obtido.

1 curtida

Implementei seguindo a documentação do Spring, mas deu erro em outro local:
20 21-04-22 19:00:13.475 ERROR 22108 --- [io-8101-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://hr-worker/workers/2] [WorkerFeignClient#findById(Long)]: [Load balancer does not contain an instance for the service hr-worker]] with root cause

feign.FeignException$ServiceUnavailable: [503] during [GET] to [http://hr-worker/workers/2] [WorkerFeignClient#findById(Long)]: [Load balancer does not contain an instance for the service hr-worker]

Neste ainda não consegui achar a causa, procurei o erro no Stack Over Flow mas não encontrei nenhuma resposta consistente.

Segue imagem:

Que URL é essa: http://hr-worker/workers/2 ?

Esta sendo montada na classe: WorkerFeignClient

Agora a mensagem mudou, inserido na application.properties: spring.cloud.loadbalancer.ribbon.enabled=false

Apresenta:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'paymentResource': Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.claytoncalixto.hrpayroll.services.PaymentService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.cloud.client.loadbalancer.LoadBalanced(), @org.springframework.beans.factory.annotation.Autowired(required=true)}

Mesmo mudando a tag de false para true o resultado é o mesmo.

Outra situação da mensagem, é informado na mensagem oc campo “service” na classe “PaymentResource” mas ainda não decifrei o porque:

A anotação @LoadBalancer não está no lugar certo. Ele deve ir numa configuração. De acordo com o tutorial do spring:

@Configuration
@LoadBalancerClient(name = "say-hello", configuration = SayHelloConfiguration.class)
public class WebClientConfig {

  @LoadBalanced
  @Bean
  WebClient.Builder webClientBuilder() {
    return WebClient.builder();
  }

}

Tudo bem Lucas,

Continua o mesmo erro:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'paymentResource': Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'paymentService': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'hr-worker' in value "${hr-worker}"

Pela mensagem esta apontando erro ao criar o Bean em PaymentResource na injeção de dependência: private PaymentService service:

Só não consegui visualizar o por que!

Quando for postar o código, evite mandar imagens (isso não ajuda). Copie o código e poste na resposta.

Sobre o problema, no exemplo do site, ele usa um objeto diferente do resttemplate para fazer as requisições (WebClient). Talvez soh funcione da forma como está no tutorial do link que tinha te passado.

Vou dá uma olhada no tutorial de novo para ver se consigo de ajudar melhor.

Olá Lucas,

Foi mals, nos próximos eu insiro só o código.

1 curtida

Olá Lucas,

Descobri o por que do erro, mas tive que modificar meu POM.xml para rodar na versão anterior para poder por o projeto para andar…

<version>2.3.4.RELEASE</version>

A mensagem ocorria por conta dos campos na classe logo abaixo:

    @Value("${hr-worker}")
    	private String workerHost;
	
	@Autowired
	private RestTemplate restTemplate;

Apagando estes campos os erros não ocorreram mais, acredito que ele fazia uma chamada para objetos que já não estavam sendo mais usados.

package com.claytoncalixto.hrpayroll.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import com.claytoncalixto.hrpayroll.entities.Payment;
import com.claytoncalixto.hrpayroll.entities.Worker;
import com.claytoncalixto.hrpayroll.feignclients.WorkerFeignClient;

@Service
public class PaymentService {
	
    @Value("${hr-worker}")
	private String workerHost;
	
	@Autowired
	private RestTemplate restTemplate;
	
	@Autowired
	private WorkerFeignClient workerFeignClient;

	public Payment getPayment(long workerId, int days) {		
		Worker worker = workerFeignClient.findById(workerId).getBody();
		return new Payment(worker.getName(), worker.getDailyIncome(), days);
	}
}

Agradeço seu apoio e seu tempo em ajudar!

1 curtida