Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @StreamListener在Spring启动的主应用程序类之外时不可见。原因可能是什么?_Java_Spring_Spring Boot_Rabbitmq_Spring Cloud Stream - Fatal编程技术网

Java @StreamListener在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

这是Spring云流应用程序。正如我在标题中提到的,
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");
        
    }
}

我可以回答自己的问题,因为应用程序按预期工作

解决方案:将应用程序文件保存在父包中,以便它可以扫描子模块(据我所知)