UI를 따로 두고 마이크로 서비스와 통신하면 환경은 더욱 복잡해진다. --> 이게 마이크로 서비스 (장점만큼 복잡해짐)
이번 장에서는
이런 목표 위한 도구 : 스프링 클라우드 Spring Could
(스프링 클라우드의 유레카 Eureka, 리본Ribbon, 주울Zuul, 하이스트릭스Hystrix)
이번 장 코드는 아래 링크에 있음
https://github.com/wikibook/springboot-microservices/tree/master/microservices-v6
단점 : 상호 의존성, 확장의 유연성X
자바스크립트 코드는 ui 없는 곱셈 및 게임화 서비스에서 제공하는 rest api와 연결
서비스 분리 위해서 정적 콘텐츠 옮긴다. 스프링부트까진 말고 경량 웹서버
tomcat, nginx, jetty등 다양한 웹서버 존재
그 중 jetty 사용 (자바 위 동작, 리눅스, 윈도우 모두 쉽게 설치 실행 가능)
jetty 설치 : https://www.eclipse.org/jetty/download.php
설치 버전 : 10.0.11
cmd 에서 서버 띄우기
ui 있는 폴더에서 cmd 띄우고
java -jar '아까 jetty 다운받아서압축푼 파일경로'/start.jar
http://localhost:9090/ui/index.html 로 접속 시 jetty 웹 서버가 제공하는 웹페이지 보임
페이지에서 CORS 문제가 나오고 있어서 스프링 시큐리티 처리해준다.
다른 오리진에서 오는 요청 허용하기 위해서 백엔드 서비스에서 CORS(Cross-Origin resource Sharing)을 활성화
package microservices.book.gamification.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter {
/**
* CORS(Cross-Origin Resource Sharing) 설정
* 자세한 정보 : http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cors.html
*
* @param registry
*/
@Override
public void addCorsMappings(final CorsRegistry registry) {
registry.addMapping("/**");
}
}
gameification 애플리케이션 을 실행하려했는데
AMQP 관련해서
org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused: connect
Caused by: java.net.ConnectException: Connection refused: connect
에러가 떴다
구글링 해서 아래 코드를 추가했지만 여전히 에러였음
#spring.rabbitmq.host=loalhost
#spring.rabbitmq.port=5672
#spring.rabbitmq.username=root
#spring.rabbitmq.password=123456
시간이 걸려 생각해보니 이전 장에서 rabbitMQ를 안깔았다!!!
브로커를 실행하지 않으니 브로커가 없다는 에러가 뜨지.... 참내.... (p134, p153 )
Erlang 설치
https://www.erlang.org/downloads
rabbitMQ 설치
https://www.rabbitmq.com/download.html 에서 rabbitMQ 다운로드
설치 완료
브로커 실행
rabbitMQ Service -start 통해서 실행
rabbitMQ는 아래 폴더에 기본으로 설치된다.
C:\Program Files\RabbitMQ Server\
여기서 cmd 띄우고 rabbitMQ 잘 돌아가는지 확인
rabbitmq-plugins enable rabbitmq_management
를 통해서 management 페이지로 가야하는데
rabbitmq_managemt Error: {:plugins_not_found, [:rabbitmq_managemt]} 에러뜸
해결 : cmd 를 관리자모드로 실행 후 같은 명령어 기입
성공
http://localhost:15672/ 로 RabbitMQ Management 접속
guest/guest 로 접속 가능
이제 다시 GamificationApplication 실행 해보자
꺄 드디어 돌아간다
드디어...!!! 울랄라.... 홀리몰리 과카몰리~~
그런데 점수가 또 안보인다....
ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.
Caused by: org.springframework.messaging.converter.MessageConversionException: Could not read JSON:
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of microservices.book.gamification.event.MultiplicationSolvedEvent
(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
구글링 통해서 원작 저자의 github에서 있던 issue를 참고해서 lombok.config 파일 생성
https://github.com/microservices-practical/microservices-v5/pull/1
lombok.anyConstructor.addConstructorProperties=true
여전히 이 부분에서 에러
에러는
org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listener method could not be invoked with the incoming message
Endpoint handler details:
Method [void microservices.book.gamification.event.EventHandler.handleMultiplicationSolved(microservices.book.gamification.event.MultiplicationSolvedEvent)]
Caused by: org.springframework.messaging.converter.MessageConversionException: Could not read JSON: Cannot construct instance of microservices.book.gamification.event.MultiplicationSolvedEvent`
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of microservices.book.gamification.event.MultiplicationSolvedEvent`
lombok.config에 아래코드 추가 했음
config.stopBubbling = true
그리고 재 빌드를 해주었다!!!
드디어 된다...... 하..... 자야겠다.... 이거 해결하느라 시간을 너무 많이 썼다...내일 민서한테 혼나겠드아...
너무 길어져서 2부터 7까지 내용은 다음 게시글에서 작성하겠다