Spring cloud stream 春天的云溪卡夫卡:“;Dispatcher没有订户”;错误
我正在用kafka binder测试spring cloud stream,但出现了一个错误 原因:org.springframework.messaging.MessageDeliveryException:调度程序没有频道“unknown.channel.name”的订户。 pom.xmlSpring cloud stream 春天的云溪卡夫卡:“;Dispatcher没有订户”;错误,spring-cloud-stream,Spring Cloud Stream,我正在用kafka binder测试spring cloud stream,但出现了一个错误 原因:org.springframework.messaging.MessageDeliveryException:调度程序没有频道“unknown.channel.name”的订户。 pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
<version>1.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
<version>1.1.2.RELEASE</version>
</dependency>
</dependencies>
boss的界面:
public interface SecretaryServingBoss {
@Input
SubscribableChannel inbox();
@Output
MessageChannel rejected();
@Output
MessageChannel approved();
}
应用程序属性
server.port=8080
spring.cloud.stream.bindings.inbox.destination=inbox
spring.cloud.stream.bindings.approved.destination=approved
spring.cloud.stream.bindings.rejected.destination=rejected
Employee.java
@EnableBinding(SecretaryServingEmployee.class)
@Component
public class Employee {
private static Logger logger = LoggerFactory.getLogger(Employee.class);
private SecretaryServingEmployee adminAssistent;
@Autowired
public Employee(SecretaryServingEmployee adminAssistent) {
this.adminAssistent = adminAssistent;
}
@InboundChannelAdapter(value = "inbox")
public String messageSource() {
return "You are handsome!!"; // This is the message sent to boss
}
@ServiceActivator(inputChannel="approved")
public void checkApproved(String message) {
logger.info(":-)");
}
@ServiceActivator(inputChannel="rejected")
public void checkRejected(RejectionLetter letter) {
logger.warn(":-(");
}
}
java
@EnableBinding(SecretaryServingBoss.class)
@Component
public class Boss {
private SecretaryServingBoss adminAssistent;
@Autowired
public Boss(SecretaryServingBoss adminAssistent) {
this.adminAssistent = adminAssistent;
}
@ServiceActivator(inputChannel="inbox")
public void sign(String content) {
if (content.contains("You are handsome")) {
adminAssistent.approved().send(message("nice work"));
}
else {
adminAssistent.rejected().send(message("Don't send me shit"));
}
}
private <T> Message<T> message(T content) {
return MessageBuilder.withPayload(content).build();
}
}
您的应用程序类似乎未正确扫描组件 如果您以Spring引导应用程序的形式运行此应用程序,那么您可以确保是否正确打包了要扫描的类
例如,默认情况下,
@SpringBootApplication
的组件扫描会查看@SpringBootApplication
注释类所在的同一包下的类。有人可能会从我的经验中受益,整天都在与这个问题斗争,直到我看到@ILayPerumal的回复
我继承了一个带有声明组件扫描的groovy微服务,我想知道他们为什么这么做
例如,默认情况下@SpringBootApplication的组件扫描查看@SpringBootApplication>注释类所在的同一包下的类
所以我重构了包,没有手动更新组件扫描值,这就是我问题的根源
如果遇到相同的问题,请检查包扫描。是的,这是一个Spring Boot应用程序,所有代码都在一个包中。每个包不需要唯一的目标名称吗?e、 g.
@Input(“bossInbox”)
等。唯一的目的地名称修复了该问题。谢谢你,@GaryRussell
@EnableBinding(SecretaryServingBoss.class)
@Component
public class Boss {
private SecretaryServingBoss adminAssistent;
@Autowired
public Boss(SecretaryServingBoss adminAssistent) {
this.adminAssistent = adminAssistent;
}
@ServiceActivator(inputChannel="inbox")
public void sign(String content) {
if (content.contains("You are handsome")) {
adminAssistent.approved().send(message("nice work"));
}
else {
adminAssistent.rejected().send(message("Don't send me shit"));
}
}
private <T> Message<T> message(T content) {
return MessageBuilder.withPayload(content).build();
}
}
org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'unknown.channel.name'.; nested exception is org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:81) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) ~[spring-messaging-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) ~[spring-messaging-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) ~[spring-messaging-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:292) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:212) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:129) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:115) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:70) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:64) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) ~[spring-messaging-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) ~[spring-messaging-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) ~[spring-messaging-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.integration.endpoint.MessageProducerSupport.sendMessage(MessageProducerSupport.java:171) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter.access$000(KafkaMessageDrivenChannelAdapter.java:47) ~[spring-integration-kafka-2.0.1.RELEASE.jar:na]
at org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter$IntegrationMessageListener.onMessage(KafkaMessageDrivenChannelAdapter.java:197) ~[spring-integration-kafka-2.0.1.RELEASE.jar:na]
at org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter$1.doWithRetry(RetryingAcknowledgingMessageListenerAdapter.java:76) ~[spring-kafka-1.0.5.RELEASE.jar:na]
at org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter$1.doWithRetry(RetryingAcknowledgingMessageListenerAdapter.java:71) ~[spring-kafka-1.0.5.RELEASE.jar:na]
at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:276) ~[spring-retry-1.1.3.RELEASE.jar:na]
at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:172) ~[spring-retry-1.1.3.RELEASE.jar:na]
at org.springframework.kafka.listener.adapter.RetryingAcknowledgingMessageListenerAdapter.onMessage(RetryingAcknowledgingMessageListenerAdapter.java:71) ~[spring-kafka-1.0.5.RELEASE.jar:na]
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:597) [spring-kafka-1.0.5.RELEASE.jar:na]
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.access$1800(KafkaMessageListenerContainer.java:222) [spring-kafka-1.0.5.RELEASE.jar:na]
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer$ListenerInvoker.run(KafkaMessageListenerContainer.java:772) [spring-kafka-1.0.5.RELEASE.jar:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [na:1.8.0_121]
at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_121]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_121]
Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:154) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:121) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) ~[spring-integration-core-4.3.1.RELEASE.jar:4.3.1.RELEASE]
... 29 common frames omitted