报错内容
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendMessageController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IMessageProviderServiceImpl': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.messaging.MessageChannel' available: expected single matching bean but found 2: nullChannel,errorChannel
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:337) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
大致意思是找不到依赖...
在application.yml文件中配置如下:
bindings:
output:
destination: studyExchange
content-type: application/json
default-binder: defaultRabbit # 如果是binder,defaultRabbit 会变红
service层代码
public interface IMessageProviderService {
String send();
}
实现类impl代码,
我的错误是Source引入错了包,导致一直报错:expected single matching bean but found 2: nullChannel,errorChannel
错误包:import javax.xml.transform.Source;
正确包:import org.springframework.cloud.stream.messaging.Source;
package com.yanheng.springcloud.service.impl;
import com.yanheng.springcloud.service.IMessageProviderService;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.cloud.stream.messaging.Source; // 正确包
import javax.annotation.Resource;
import java.util.UUID;
@EnableBinding(Source.class) // 定义消息的推送通道
public class IMessageProviderServiceImpl implements IMessageProviderService {
@Resource
private MessageChannel output; // 消息发送通道
@Override
public String send() {
String serial = UUID.randomUUID().toString();
output.send(MessageBuilder.withPayload(serial).build());
System.out.println("********serial: " + serial);
return serial;
}
}
controller层代码
@RestController
public class sendMessageController {
@Resource
private IMessageProviderService iMessageProviderService;
@GetMapping(value = "/sendMsg")
public String sendMessage() {
return iMessageProviderService.send();
}
}
找了两天也没在网络上找到正确的解决办法,有的说加@Compent,或者@Qualifier等注解,都是不可行的。希望能帮助需要的人。
网友评论