[SPRING] Spring Cloud Stream 및 @Publisher 주석 호환성
SPRINGSpring Cloud Stream 및 @Publisher 주석 호환성
Spring Cloud Stream에는 새로운 메시지를 스트림에 보내는 주석이 없으므로 (@SendTo는 @StreamListener가 선언 될 때만 작동 함), @Publisher라는 스프링 통합 주석을 사용하려고했습니다.
@Publisher는 채널을 사용하고 Spring Cloud Stream의 @EnableBinding 어노테이션은 @Output 어노테이션을 사용하여 출력 채널을 바인딩 할 수 있으므로 다음과 같은 방법으로 이들을 혼합하려고했습니다.
@EnableBinding(MessageSource.class)
@Service
public class ExampleService {
@Publisher(channel = MessageSource.OUTPUT)
public String sendMessage(String message){
return message;
}
}
또한 구성 파일에서 @EnablePublisher 주석을 선언했습니다.
@SpringBootApplication
@EnablePublisher("")
public class ExampleApplication {
public static void main(String[] args){
SpringApplication.run(ExampleApplication.class, args);
}
}
내 테스트 :
@RunWith(SpringRunner.class)
@SpringBootTest
public class ExampleServiceTest {
@Autowired
private ExampleService exampleService;
@Test
public void testQueue(){
exampleService.queue("Hi!");
System.out.println("Ready!");
}
}
하지만 다음과 같은 오류가 발생합니다.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.ExampleServiceTest': Unsatisfied dependency expressed through field 'exampleService'; nested exception is
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'exampleService' is expected to be of type 'com.example.ExampleService' but was actually of type 'com.sun.proxy.$Proxy86'
문제는 ExampleService bean을 삽입 할 수 없다는 것입니다.
누구든지이 일을 어떻게 할 수 있는지 알고 있습니까?
감사!
해결법
-
==============================
1.ExampleService에서 @Publisher 주석을 사용하기 때문에 게시 내용에 대해 프록시 처리됩니다.
ExampleService에서 @Publisher 주석을 사용하기 때문에 게시 내용에 대해 프록시 처리됩니다.
이 문제를 극복하는 유일한 방법은 ExampleService의 인터페이스를 노출하고 이미 테스트 클래스에이 인터페이스를 삽입하는 것입니다.
public interface ExampleServiceInterface { String sendMessage(String message); } ... public class ExampleService implements ExampleServiceInterface { ... @Autowired private ExampleServiceInterface exampleService;
반면에 ExampleService.sendMessage ()는 메시지를 처리하지 않으므로 대신 일부 인터페이스에서 @MessagingGateway를 사용하는 것이 좋습니다. https://docs.spring.io/spring-integration/reference/html /messaging-endpoints-chapter.html#gateway
from https://stackoverflow.com/questions/54150939/spring-cloud-stream-and-publisher-annotation-compatiblity by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring / Hibernate에서의 적절한 캐시 사용법 (0) | 2019.05.18 |
---|---|
[SPRING] jQuery DataTables - DataTable을 다시 초기화 할 수 없습니다. (0) | 2019.05.18 |
[SPRING] OPTIONS / DELETE에 대해 봄 부팅 데이터 Rest + CORS가 올바르게 설정되지 않음 (0) | 2019.05.18 |
[SPRING] Spring Boot @WebMvcTest를 사용하여 테스트 할 때 내 컨텍스트에서 다른 @Controller를 제외하는 방법 (0) | 2019.05.18 |
[SPRING] 스프링 보안으로 MD5에서 BCrypt로 전환하기 (0) | 2019.05.18 |