728x90
다듬어 정리하지 않고, 공부하면서 작성한 내용입니다. 양해 바랍니다.
Spring Cloud Gateway + Eureka 연동
Gateway service를 Eureka에 등록하자.
이전에 설정할 때 미리 등록해 뒀으므로 확인만 해주고 넘어가자.
그리고 해당 implementation은 first-service와, second-service에 모두 등록해주도록 하자.
(사실 이것도 미리 다 등록해두긴 했다 ㅎ)
이제 유레카 설정 정보를 등록하자.
Gateway Server, First-Service, Second-Service 변경
application.yml 변경
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
Gateway Server 변경
application.yml 변경
spring -> cloud -> gateway -> routes -> uri
spring:
cloud:
gateway:
routes:
- id: first-service
uri: lb://MY-FIRST-SERVICE
- id: second-service
uri: lb://MY-SECOND-SERVICE
전체 코드
server:
port: 8000
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: gateway-service
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway Global Filter
preLogger: true
postLogger: true
routes:
- id: first-service
uri: lb://MY-FIRST-SERVICE
predicates:
- Path=/first-service/**
filters:
# - AddRequestHeader=first-request, first-requests-header2
# - AddResponseHeader=first-response, first-response-header2
- CustomFilter
- id: second-service
uri: lb://MY-SECOND-SERVICE
predicates:
- Path=/second-service/**
filters:
# - AddRequestHeader=second-request, second-requests-header2
# - AddResponseHeader=second-response, second-response-header2
- CustomFilter
- name: LoggingFilter
args:
baseMessage: Spring Cloud Gateway Logging Filter
preLogger: true
postLogger: true
유레카 서버를 실행시킨 후, gateway와 FirstService, SceondService를 모두 실행시키고, http://localhost:8761로 이동해보자.
마이크로서비스 개발 - Users Microservice
기능 | URI (API Gateway 사용 시) | URI (API Gateway 미사용 시) | HTTP Method |
사용자 정보 등록 | /user-service/users | /users | POST |
전체 사용자 조회 | /user-service/users | /users | GET |
사용자 정보, 주문내역 조회 | /user-service/users/{user_id} | /users/{user_id} | GET |
작동 상태 확인 | /user-service/users/health_check | /users/health_check | GET |
환영 메시지 | /user-service/users/welcome | /users/welcome | GET |
Dependencies
DevTools, Lombok, Web, Eureka Discovery Client, H2, JPA
application.yml
server:
port: 0
spring:
application:
name: user-service
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
eureka:
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
greeting:
message: Welcome to the Simple E-commerce.
메인
@SpringBootApplication
@EnableDiscoveryClient//추가
public class UserserviceApplication {
public static void main(String[] args) {
SpringApplication.run(UserserviceApplication.class, args);
}
}
User Controller
@RestController
@RequestMapping("/")
@RequiredArgsConstructor
public class UserController {
private final Environment env;
@GetMapping("/health_check")
public String status(){
return "It's Working in User Service";
}
@GetMapping("/welcome")
public String welcome(){
return env.getProperty("greeting.message");
}
}
한번 연결이 잘 되는지 테스트 해본 후, 회원가입을 진행하자.
회원가입
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Setter
public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 50)
private String email;
@Column(nullable = false, length = 50)
private String name;
@Column(nullable = false, unique = true)
private String userId;
@Column(nullable = false, unique = true)
private String encryptedPwd;
}
@Data
public class UserDto {
private String email;
private String name;
private String pwd;
private String userId;
private LocalDateTime createdAt;
private String encryptedPwd;
}
@Data
public class RequestUser {
private String email;
private String name;
private String password;
}
@Data
public class ResponseUser {
private String email;
private String name;
private String userId;
}
public interface UserRepository extends JpaRepository<User, Long> {
}
public interface UserService {
UserDto createUser(UserDto userDto);
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
private final UserRepository userRepository;
@Override
public UserDto createUser(UserDto userDto){
userDto.setUserId(UUID.randomUUID().toString());
ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
User user = mapper.map(userDto, User.class);
user.setEncryptedPwd("encrypted_password");
userRepository.save(user);
return null;
}
}
@RestController
@RequestMapping("/")
@RequiredArgsConstructor
public class UserController {
private final Environment env;
private final UserService userService;
@GetMapping("/health_check")
public String status(){
return "It's Working in User Service";
}
@GetMapping("/welcome")
public String welcome(){
return env.getProperty("greeting.message");
}
@PostMapping("/users")
public ResponseEntity createUser(@RequestBody RequestUser user){
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
UserDto userDto = modelMapper.map(user, UserDto.class);
userService.createUser(userDto);
ResponseUser responseUser = modelMapper.map(userDto, ResponseUser.class);
return new ResponseEntity(responseUser, HttpStatus.CREATED);
}
}
실행해보면 잘 되는것을 알 수 있다.
728x90
'모각코 > 2021 동계 모각코 : 안꿀단지' 카테고리의 다른 글
[목표] 모각코 5회차 목표 (0) | 2022.01.24 |
---|---|
[회고] 4회차 회고 (0) | 2022.01.17 |
[목표] 모각코 4회차 목표 (0) | 2022.01.17 |
[회고] 3회차 회고 (0) | 2022.01.10 |
[활동내용] 3회차 활동내용 (0) | 2022.01.10 |