java - 在 Spring Boot 的主应用程序类之外时,@StreamListener 不可见。可能是什么原因?
问题描述
这是 Spring Cloud Stream 应用程序。正如我在标题中提到的,StreamListener
注释在SpringBootApplication主类中有效,但当它位于具有@Component
注释的不同类中时无效。
我相信这是某种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);
}
}
SlideChannel.java
public interface SlideChannel {
String slideInputStream = "slideInputStream";
@Input(SlideChannel.slideInputStream)
SubscribableChannel slideInput();
}
SlideListener.java
@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");
}
}
应用程序属性
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.cloud.stream.rabbit.bindings.slideInputStream.consumer.consumerTagPrefix=SlideConsumer
spring.cloud.stream.bindings.slideInputStream.destination=EventbusRouter
spring.cloud.stream.bindings.slideInputStream.group=Slide-Consumer-Service-Group
spring.cloud.stream.rabbit.bindings.slideInputStream.consumer.exchangeDurable=false
spring.cloud.stream.rabbit.bindings.slideInputStream.consumer.bind-queue=true
spring.cloud.stream.rabbit.bindings.slideInputStream.consumer.bindingRoutingKey=SlideTopic
spring.cloud.stream.rabbit.bindings.slideInputStream.consumer.durableSubscription=false
解决方案
我可以回答自己,因为应用程序按预期工作。
解决方案:将应用程序文件保留在父包中,以便它可以扫描子模块。(据我了解)。
推荐阅读
- sql-server - 从定义的数据透视表创建索引视图
- php - docker 和 couchbase sdk 安装
- javascript - Javascript 运行时的哪一部分负责将回调放入回调队列?
- python - 无法打开文件'demo.py':[Errno 2] 通过 bash 脚本运行时没有这样的文件或目录
- php - 如何将多维数组存储到简单数组
- sql - 在继承层次结构中声明一个表,其中子级还引用基表中的另一个条目
- php - Laravel 刀片问题
- android - 颤振显示旧错误
- html - 在 flex 容器中将搜索字段居中,同时将徽标保持在右侧?
- c# - C#,NetCore 3.0 - 方法:[HttpGet]