Skip to content
Snippets Groups Projects
Commit 97a85ec2 authored by Jakub Janeček's avatar Jakub Janeček
Browse files

Add eureka service discovery

parent 5622de9e
No related branches found
No related tags found
No related merge requests found
Pipeline #94942 passed
......@@ -3,29 +3,37 @@ package cz.cvut.fel.swa.bookmaker.bookmakerservice.client;
import cz.cvut.fel.swa.bookmaker.bookmakerservice.client.converter.OddsConverter;
import cz.cvut.fel.swa.bookmaker.bookmakerservice.client.dto.OddsDto;
import cz.cvut.fel.swa.bookmaker.bookmakerservice.domain.Odds;
import org.springframework.beans.factory.annotation.Qualifier;
import lombok.RequiredArgsConstructor;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import java.util.Optional;
@Component
@RequiredArgsConstructor
public class OddsClient {
private final WebClient webClient;
public OddsClient(@Qualifier("oddsWebClient") WebClient webClient) {
this.webClient = webClient;
}
private final LoadBalancerClient loadBalancerClient;
private final WebClient.Builder webClientBuilder;
public Optional<Odds> getOdds(Long id) {
var oddsDto = webClient.get()
.uri(uriBuilder -> uriBuilder
.path("/odds/{id}")
.build(id))
ServiceInstance instance = loadBalancerClient.choose("ODDS-SERVICE");
if (instance == null) {
return Optional.empty();
}
String baseUrl = instance.getUri().toString();
var oddsDto = webClientBuilder
.baseUrl(baseUrl)
.build()
.get()
.uri("/odds/{id}", id)
.retrieve()
.bodyToMono(OddsDto.class)
.block();
return oddsDto != null ? Optional.of(OddsConverter.toModel(oddsDto)) : Optional.empty();
}
}
......@@ -3,29 +3,37 @@ package cz.cvut.fel.swa.bookmaker.bookmakerservice.client;
import cz.cvut.fel.swa.bookmaker.bookmakerservice.client.converter.UserConverter;
import cz.cvut.fel.swa.bookmaker.bookmakerservice.client.dto.UserDto;
import cz.cvut.fel.swa.bookmaker.bookmakerservice.domain.User;
import org.springframework.beans.factory.annotation.Qualifier;
import lombok.RequiredArgsConstructor;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import java.util.Optional;
@Component
@RequiredArgsConstructor
public class UserClient {
private final WebClient webClient;
public UserClient(@Qualifier("userWebClient") WebClient webClient) {
this.webClient = webClient;
}
private final LoadBalancerClient loadBalancerClient;
private final WebClient.Builder webClientBuilder;
public Optional<User> getUser(Long id) {
var userDto = webClient.get()
.uri(uriBuilder -> uriBuilder
.path("/users/{id}")
.build(id))
ServiceInstance instance = loadBalancerClient.choose("USER-SERVICE");
if (instance == null) {
return Optional.empty();
}
String baseUrl = instance.getUri().toString();
var userDto = webClientBuilder
.baseUrl(baseUrl)
.build()
.get()
.uri("/users/{id}", id)
.retrieve()
.bodyToMono(UserDto.class)
.block();
return userDto != null ? Optional.of(UserConverter.toModel(userDto)) : Optional.empty();
}
}
package cz.cvut.fel.swa.bookmaker.bookmakerservice.client.configuration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
@EnableConfigurationProperties
public class ClientConfiguration {
@Bean("userWebClient")
WebClient userWebClient(WebClient.Builder webClientBuilder, UserClientProperties userClientProperties) {
return webClientBuilder
.baseUrl(userClientProperties.getUrl())
.build();
}
@Bean("oddsWebClient")
WebClient oddsWebClient(WebClient.Builder webClientBuilder, OddsClientProperties oddsClientProperties) {
return webClientBuilder
.baseUrl(oddsClientProperties.getUrl())
.build();
}
}
package cz.cvut.fel.swa.bookmaker.bookmakerservice.client.configuration;
import jakarta.annotation.PostConstruct;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.Assert;
@Data
@Configuration
@ConfigurationProperties("bookmaker.odds-service")
public class OddsClientProperties {
private String url;
@PostConstruct
void validate() {
Assert.notNull(url, "Odds-service url must not be null!");
}
}
package cz.cvut.fel.swa.bookmaker.bookmakerservice.client.configuration;
import jakarta.annotation.PostConstruct;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.Assert;
@Data
@Configuration
@ConfigurationProperties("bookmaker.user-service")
public class UserClientProperties {
private String url;
@PostConstruct
void validate() {
Assert.notNull(url, "User-service url must not be null!");
}
}
spring:
application:
name: bookmaker-service
bookmaker:
user-service:
url: http://localhost:8081
odds-service:
url: http://localhost:8082
eureka:
client:
serviceUrl:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment