Feign Client 문서 및 코드 작성

This commit is contained in:
roy-zz
2022-04-26 00:12:23 +09:00
parent 80b866dac5
commit dfd1cfca6c
13 changed files with 351 additions and 8 deletions

View File

@@ -9,6 +9,7 @@ dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'io.jsonwebtoken:jjwt:0.9.1'

View File

@@ -1,14 +1,19 @@
package com.roy.springcloud.userservice;
import com.roy.springcloud.userservice.client.FeignErrorDecoder;
import feign.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.client.RestTemplate;
@EnableEurekaClient
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class UserServiceApplication {
@@ -27,4 +32,14 @@ public class UserServiceApplication {
return new RestTemplate();
}
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
@Bean
public FeignErrorDecoder getFeignErrorDecoder() {
return new FeignErrorDecoder();
}
}

View File

@@ -0,0 +1,22 @@
package com.roy.springcloud.userservice.client;
import feign.Response;
import feign.codec.ErrorDecoder;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;
public class FeignErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
switch (response.status()) {
case 404:
if (methodKey.contains("getOrders")) {
return new ResponseStatusException(HttpStatus.valueOf(response.status()), "Order Info Not Found");
}
break;
default:
return new Exception(response.reason());
}
return null;
}
}

View File

@@ -0,0 +1,17 @@
package com.roy.springcloud.userservice.client;
import com.roy.springcloud.userservice.vo.response.OrderResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
@FeignClient(name = "order-service")
public interface OrderServiceClient {
@GetMapping("/invalid-path/{userId}")
// @GetMapping("/order-service/{userId}/orders")
List<OrderResponse> getOrders(@PathVariable String userId);
}

View File

@@ -1,11 +1,13 @@
package com.roy.springcloud.userservice.service.impl;
import com.roy.springcloud.userservice.client.OrderServiceClient;
import com.roy.springcloud.userservice.domain.MyUser;
import com.roy.springcloud.userservice.dto.MyUserDto;
import com.roy.springcloud.userservice.repository.MyUserRepository;
import com.roy.springcloud.userservice.service.MyUserService;
import com.roy.springcloud.userservice.vo.response.OrderResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpMethod;
@@ -21,6 +23,7 @@ import java.util.*;
import static com.roy.springcloud.util.mapper.MapperUtil.toObject;
@Slf4j
@Service
@RequiredArgsConstructor
public class MyUserServiceImpl implements MyUserService {
@@ -28,6 +31,7 @@ public class MyUserServiceImpl implements MyUserService {
private final RestTemplate restTemplate;
private final MyUserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder;
private final OrderServiceClient orderServiceClient;
@Override
public void createUser(MyUserDto userDto) {
@@ -41,12 +45,15 @@ public class MyUserServiceImpl implements MyUserService {
public MyUserDto getUserByUserId(String userId) {
MyUser savedUser = userRepository.findByUserId(userId)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
ResponseEntity<List<OrderResponse>> orderListResponse = restTemplate.exchange(
getOrderRequestUrl(userId), HttpMethod.GET, null,
new ParameterizedTypeReference<List<OrderResponse>>() {}
);
// ResponseEntity<List<OrderResponse>> orderListResponse = restTemplate.exchange(
// getOrderRequestUrl(userId), HttpMethod.GET, null,
// new ParameterizedTypeReference<List<OrderResponse>>() {}
// );
// MyUserDto response = toObject(savedUser, MyUserDto.class);
// response.setOrders(orderListResponse.getBody());
List<OrderResponse> orderListResponse = orderServiceClient.getOrders(userId);
MyUserDto response = toObject(savedUser, MyUserDto.class);
response.setOrders(orderListResponse.getBody());
response.setOrders(orderListResponse);
return response;
}

View File

@@ -34,7 +34,7 @@ greeting:
message: Welcome to the Simple E-Commerce(User Service).
logging:
lelvel:
level:
com.roy.springcloud.userservice: DEBUG
management: