Java @StreamListener在Spring启动的主应用程序类之外时不可见。原因可能是什么?
这是Spring云流应用程序。正如我在标题中提到的,Java @StreamListener在Spring启动的主应用程序类之外时不可见。原因可能是什么?,java,spring,spring-boot,rabbitmq,spring-cloud-stream,Java,Spring,Spring Boot,Rabbitmq,Spring Cloud Stream,这是Spring云流应用程序。正如我在标题中提到的,StreamListener注释在springbootcapplication主类中工作,但当它位于带有@组件的另一个类中时就不工作了 我认为这是某种StreamListener可见性问题 我正在从RabbitMQ管理界面发布消息 以下是我得到的例外情况: ERROR 10676 --- [Service-Group-1] o.s.integration.handler.LoggingHandler : org.springframewor
StreamListener
注释在springbootcapplication主类中工作,但当它位于带有@组件的另一个类中时就不工作了
我认为这是某种StreamListener
可见性问题
我正在从RabbitMQ管理界面发布消息
以下是我得到的例外情况:
ERROR 10676 --- [Service-Group-1] o.s.integration.handler.LoggingHandler : org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'Consumer-Slide.slideInputStream'.; nested exception is org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
ConsumerApplication.java
@SpringBootApplication
@EnableBinding(SlideChannel.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
public interface SlideChannel {
String slideInputStream = "slideInputStream";
@Input(SlideChannel.slideInputStream)
SubscribableChannel slideInput();
}
@Component
public class SlideListener {
@Autowired
private SlideChannel slideCh;
@Autowired
private SlideService slideService;
@StreamListener(target=SlideChannel.slideInputStream)
public void getSingleSlideDetails(Message<?> messageId) {
System.out.println("Message consumed");
}
}
SlideChannel.java
@SpringBootApplication
@EnableBinding(SlideChannel.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
public interface SlideChannel {
String slideInputStream = "slideInputStream";
@Input(SlideChannel.slideInputStream)
SubscribableChannel slideInput();
}
@Component
public class SlideListener {
@Autowired
private SlideChannel slideCh;
@Autowired
private SlideService slideService;
@StreamListener(target=SlideChannel.slideInputStream)
public void getSingleSlideDetails(Message<?> messageId) {
System.out.println("Message consumed");
}
}
SlideListener.java
@SpringBootApplication
@EnableBinding(SlideChannel.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
public interface SlideChannel {
String slideInputStream = "slideInputStream";
@Input(SlideChannel.slideInputStream)
SubscribableChannel slideInput();
}
@Component
public class SlideListener {
@Autowired
private SlideChannel slideCh;
@Autowired
private SlideService slideService;
@StreamListener(target=SlideChannel.slideInputStream)
public void getSingleSlideDetails(Message<?> messageId) {
System.out.println("Message consumed");
}
}
我可以回答自己的问题,因为应用程序按预期工作
解决方案:将应用程序文件保存在父包中,以便它可以扫描子模块(据我所知)