Поскольку Spring Cloud Stream не имеет аннотации для отправки нового сообщения в поток (@SendTo работает только при объявлении @StreamListener), я попытался использовать для этой цели аннотацию Spring Integration, то есть @ 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'
Проблема здесь в том, что bean-компонент ExampleService не может быть внедрен.
Кто-нибудь знает, как я могу заставить эту работу?
Спасибо!