Skip to content

Commit 1574fa7

Browse files
committed
Call TMDB api to get movie info, put timeout on requests
1 parent 4127313 commit 1574fa7

File tree

6 files changed

+73
-6
lines changed

6 files changed

+73
-6
lines changed

movie-catalog-service/src/main/java/com/moviecatalogservice/MovieCatalogServiceApplication.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,22 @@
55
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
66
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
77
import org.springframework.context.annotation.Bean;
8+
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
89
import org.springframework.web.client.RestTemplate;
910

1011
@SpringBootApplication
1112
@EnableEurekaClient
1213
public class MovieCatalogServiceApplication {
1314

15+
private final int TIMEOUT = 3000; // 3 seconds
16+
1417
@Bean
1518
@LoadBalanced
1619
public RestTemplate getRestTemplate() {
17-
return new RestTemplate();
20+
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
21+
clientHttpRequestFactory.setConnectTimeout(TIMEOUT); // Set the timeout to 3 seconds
22+
23+
return new RestTemplate(clientHttpRequestFactory);
1824
}
1925

2026
public static void main(String[] args) {

movie-info-service/src/main/java/com/example/movieinfoservice/MovieInfoServiceApplication.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,23 @@
33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
55
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
8+
import org.springframework.web.client.RestTemplate;
69

710
@SpringBootApplication
811
@EnableEurekaClient
912
public class MovieInfoServiceApplication {
1013

14+
private final int TIMEOUT = 3000; // 3 seconds
15+
16+
@Bean
17+
public RestTemplate getRestTemplate() {
18+
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
19+
clientHttpRequestFactory.setConnectTimeout(TIMEOUT); // Set the timeout to 3 seconds
20+
return new RestTemplate();
21+
}
22+
1123
public static void main(String[] args) {
1224
SpringApplication.run(MovieInfoServiceApplication.class, args);
1325
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.example.movieinfoservice.models;
2+
3+
public class MovieSummary {
4+
private String id;
5+
private String title;
6+
private String overview;
7+
8+
public String getId() {
9+
return id;
10+
}
11+
12+
public void setId(String id) {
13+
this.id = id;
14+
}
15+
16+
public String getTitle() {
17+
return title;
18+
}
19+
20+
public void setTitle(String title) {
21+
this.title = title;
22+
}
23+
24+
public String getOverview() {
25+
return overview;
26+
}
27+
28+
public void setOverview(String overview) {
29+
this.overview = overview;
30+
}
31+
}
Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,33 @@
11
package com.example.movieinfoservice.resources;
22

33
import com.example.movieinfoservice.models.Movie;
4+
import com.example.movieinfoservice.models.MovieSummary;
5+
import org.springframework.beans.factory.annotation.Value;
6+
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
47
import org.springframework.web.bind.annotation.PathVariable;
58
import org.springframework.web.bind.annotation.RequestMapping;
69
import org.springframework.web.bind.annotation.RestController;
10+
import org.springframework.web.client.RestTemplate;
711

812
@RestController
913
@RequestMapping("/movies")
1014
public class MovieResource {
1115

16+
@Value("${api.key}")
17+
private String apiKey;
18+
19+
private RestTemplate restTemplate;
20+
21+
public MovieResource(RestTemplate restTemplate) {
22+
this.restTemplate = restTemplate;
23+
}
24+
1225
@RequestMapping("/{movieId}")
13-
public Movie getMovieInfo(@PathVariable String movieId) {
14-
return new Movie(movieId, "Test name", "Test description");
26+
public Movie getMovieInfo(@PathVariable("movieId") String movieId) {
27+
// Get the movie info from TMDB
28+
final String url = "https://api.themoviedb.org/3/movie/" + movieId + "?api_key=" + apiKey;
29+
MovieSummary movieSummary = restTemplate.getForObject(url, MovieSummary.class);
30+
31+
return new Movie(movieId, movieSummary.getTitle(), movieSummary.getOverview());
1532
}
1633
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
spring.application.name=movie-info-service
2-
server.port=8082
2+
server.port=8082
3+
4+
api.key=b0af84324ea41ca39f4311c9156e94e3

ratings-data-service/src/main/java/com/example/ratingsservice/resources/RatingsResource.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ public class RatingsResource {
1616
@RequestMapping("/{userId}")
1717
public UserRating getRatingsOfUser(@PathVariable String userId) {
1818
List<Rating> ratings = Arrays.asList(
19-
new Rating("1234", 4),
20-
new Rating("5678", 3)
19+
new Rating("550", 4)
2120
);
2221

2322
return new UserRating(ratings);

0 commit comments

Comments
 (0)