현재까지의 결론은 '안된다'.
테스트해본 바로는 두 방식을 함께 적용하면 annotation 만 동작하고 functional 한 방식은 동작하지 않는다.
해법 찾으려고 시도해봤지만 공식 문서에서의 언급은 못 찾았고 아래 글 보고 일단 잠정적으로 혼용 시도는 중단.
- 'You cannot mix EnableBinding and functional model in the same application.' https://stackoverflow.com/questions/63862797/spring-cloud-stream-function-support-does-not-work
작년이었나 Spring Cloud Stream 3.* 대 올라가면서 functional style 도입되었다는 기사 보고 이전 짰던 소스 중 일부 기능만 추출해서 미니 프로젝트 만들어 변경 구현해본 적이 있었다. boilerplate 한 부분 많이 줄어드는 것 확인했고 추후 기회되면 레거시 소스 변경해야지 맘만 먹고 미뤄뒀는데.
드디어 레거시 소스 건드릴 일 생겼는데, 아뿔싸! 작업 직전 새 노트북 지급 받아 셋팅하다가 샘플 구현했던 소스 다 날려먹어서(회사 레포지터리에 올려놓지도 않았다 ㅜㅠ) 맨 땅에서 다시 시작.
레퍼런스와 모래알처럼 남은 옛 샘플 구현 기억 되살리며 기존 구현부 다 건드리기 보다는 추가 기능들만 functional style 적용해서 코딩했는데 실행해도 반응이 없다.
마구 삽질해보고 내린 결론이 글 서두에 적은거고 혹여라도 같은 고민 중인 분들 있을지 몰라서 기록해봤다.
EnableBinding 애노테이션 구현부와 convention 기반한 바인딩 구현부 비교해보면 뭔가 트릭을 찾아낼 수도 있겠지만 당장은 레거시 방식의 코드 전체를 functional model 로 재작업해보려 눈물 닦고 팔 겉어붙인다. (혹 혼용 트릭 발견하신 분 계신다면 댓글로 정보 공유 부탁드려요)
왜 모델 전환이 필요한가에 대한 답변, 스프링 블로그에서 살짝 인용하는 걸로 이번 글은 맺고 functional model 구현 가이드는 지금 작업 좀 진행된 후 작성해보는걸로.
Both are valid and fully functioning SCSt applications. Both do the same thing and both produce the same result – except that, in the annotation-based example, the user has to be aware of SCSt abstractions (that is, messaging, channels, binding, and so on) while the actual user code has nothing to do with any of them.
...
So, in this context, why do you need to provide so many instructions, especially through annotations (
EnableBinding, Processor, StreamListener
, and others), where one can easily extract or infer the same information (in the context of SCSt ) by simply following some convention.
'Lang' 카테고리의 다른 글
[Java]Pair, Pair.of() (0) | 2021.06.09 |
---|---|
[Java]Spring Cloud 에서 Kafka 인증 기능 사용 (0) | 2021.06.02 |
[python]kafka -> mongoDB 처리 시 insert_many 사용하기 (0) | 2020.12.28 |
[python]kafka 토픽 내 메시지 개수를 구해보자 (0) | 2020.12.28 |
[java]Kafka Streams 에서 Json 처리하기 (0) | 2020.11.25 |