8. User-service와 Spring Cloud Gateway 연동
- 📚 Spring/Spring Cloud
- 2023. 1. 27. 10:32
| User-service와 Spring Cloud Gateway 연동
💻 user-service.java > application.yml
server:
port: 0
spring:
application:
name: user-service
datasource:
url: jdbc:postgresql://localhost:5432/basic
username: postgres
password: 1234
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
eureka:
instance:
hostname: localhost
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
greeting:
message: Welcome to the Simple E-commerce.
자꾸 연동이 안될 경우 hostname: localhost 부분을 추가해줘야 한다.
💻 user-service > UserController
package com.example.userservice.controller;
import java.util.ArrayList;
import java.util.List;
@RestController
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/user-service")
public class UserController {
private final Environment env;
private final UserService userService;
private final Greeting greeting;
/* @Autowired
public UserController(Environment env, UserService userService) {
this.env = env;
this.userService = userService;
}*/
@GetMapping("/health_check")
public String status() {
//return "It's working in User Service";
return String.format("It's Working is User Service on PORT %s", env.getProperty("local.server.port"));
}
@GetMapping("/welcome")
public String welcome() {
//return env.getProperty("greeting.message");
return greeting.getMessage();
}
@PostMapping("/users")
public ResponseEntity createUser(@RequestBody RequestUser user) {
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
UserDto userDto = mapper.map(user, UserDto.class);
userService.createUser(userDto);
ResponseUser responseUser = mapper.map(userDto, ResponseUser.class);
//return "Create user method is called";
//return new ResponseEntity(HttpStatus.CREATED);
return ResponseEntity.status(HttpStatus.CREATED).body(responseUser);
}
@GetMapping("/users")
public ResponseEntity<List<ResponseUser>> getUsers() {
Iterable<UserEntity> userList = userService.getUserByAll();
List<ResponseUser> result = new ArrayList<>();
userList.forEach(v -> {
result.add(new ModelMapper().map(v, ResponseUser.class));
});
return ResponseEntity.status(HttpStatus.OK).body(result);
}
@GetMapping("/users/{userId}")
public ResponseEntity<ResponseUser> getUser(@PathVariable("userId") String userId) {
UserDto userDto = userService.getUserByUserId(userId);
System.out.println("userDto = " + userDto);
ResponseUser returnValue = new ModelMapper().map(userDto, ResponseUser.class);
return ResponseEntity.status(HttpStatus.OK).body(returnValue);
}
}
userserviceImpl
package com.example.userservice.service;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder;
@Override
public UserDto createUser(UserDto userDto) {
userDto.setUserId(UUID.randomUUID().toString());
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
UserEntity userEntity = mapper.map(userDto, UserEntity.class);
//userEntity.setEncryptedPwd("encrypted_password");
userEntity.setEncryptedPwd(passwordEncoder.encode(userDto.getPwd()));
userRepository.save(userEntity);
UserDto returnUserDto = mapper.map(userEntity, UserDto.class);
return returnUserDto;
}
@Override
public UserDto getUserByUserId(String userId) {
UserEntity userEntity = userRepository.findByUserId(userId);
if(userEntity == null){
throw new UsernameNotFoundException("User not found");
}
UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
List<ResponseOrder> orders = new ArrayList<>();
userDto.setOrders(orders);
return userDto;
}
@Override
public Iterable<UserEntity> getUserByAll() {
return userRepository.findAll();
}
}
💻 Apigateway-service > application.yml
user-service를 APIGateway에 등록해준다.
server:
port: 8000
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: apigateway-service
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway Global Filter
preLogger: true
postLogger: true
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/**
- id: first-service
uri: lb://MY-FIRST-SERVICE
predicates:
- Path=/first-service/**
filters:
- CustomFilter
- id: second-service
uri: lb://MY-SECOND-SERVICE
predicates:
- Path=/second-service/**
filters:
- name: CustomFilter
- name: LoggingFilter
args:
baseMessage: Hi, there Logging
preLogger: true
postLogger: true
테스트
http://lpc:8000/user-service/health_check 즉, API-GATEWAY 링크로 user-service/health_check 연동해서 메세지가 출력되면 정상작동 되는 것이다.
등록
userId로 조회
전체조회
'📚 Spring > Spring Cloud' 카테고리의 다른 글
10. Order-service와 Spring Cloud Gateway 연동 (0) | 2023.01.28 |
---|---|
9. Catalog-service와 Spring Cloud Gateway 연동 (0) | 2023.01.28 |
Spring Cloud Config의 이해 (0) | 2022.01.29 |
SpringCloud의 이해 (0) | 2022.01.28 |
Spring Cloud Gateway - Load Balancer (0) | 2021.09.29 |