解决Dubbo中生产者未启动,消费者启动报错的问题

环境

spring boot 2.1.1.RELEASE
dubbo version 2.7.3

现象

Dubbo服务有依赖时,如A依赖B。B依赖C,那必须要按顺序先启动C,再启动B,最后再启动A。不然A,B都无法启动。会报错Injection of @Reference dependencies is failed;导致应用无法启动。

2019-12-05 11:18:16.294 ERROR 3668 --- [           main] o.s.boot.SpringApplication               : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userController': Injection of @Reference dependencies is failed; nested exception is java.lang.IllegalStateException: Failed to check the status of the service org.nacosdemo.account.service.AccountService. No provider available for the service org.nacosdemo.account.service.AccountService from the url spring-cloud://localhost:9090/org.apache.dubbo.registry.RegistryService?application=service-user&dubbo=2.0.2&interface=org.nacosdemo.account.service.AccountService&lazy=false&methods=selectAll,selectById,updateBalance&pid=3668&qos.enable=false&register.ip=10.53.56.1&release=2.7.3&retries=0&side=consumer&sticky=false&timestamp=1575515895860 to the consumer 10.53.56.1 use dubbo version 2.7.3
	at org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor.postProcessPropertyValues(AnnotationInjectedBeanPostProcessor.java:151) ~[dubbo-2.7.3.jar:2.7.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1383) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]

解决方法

在@Reference注解上添加check=false属性即可

public class UserController {
	private static Logger logger = LoggerFactory.getLogger(UserController.class);

	@Autowired
	private UserService userService;
	
    @Reference(retries = 0, check = false)
    private AccountService accountService;
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,Dubbo提供者启动不了可能有多种原因。以下是一些可能的解决方法: 1. 检查Zookeeper连接:Dubbo提供者需要连接到Zookeeper进行服务注册和发现。请确保Zookeeper已正确启动,并且提供者配置文件的Zookeeper地址和端口与实际情况相匹配。 2. 检查Dubbo配置:请确保提供者的Dubbo配置文件的各项配置正确无误。特别是检查提供者的服务接口、版本号、协议等配置是否与消费者的配置相匹配。 3. 检查端口占用:如果提供者的端口被其他进程占用,可能会导致启动失败。请确保提供者的端口没有被其他进程占用。 4. 检查依赖是否完整:Dubbo提供者可能依赖于其他的jar包或者类库。请确保所有的依赖都已正确引入,并且版本兼容。 5. 检查日志输出:查看提供者的日志输出,可以帮助定位问题所在。根据日志的错误信息,可以进一步排查问题。 以下是一个示例的Dubbo提供者启动失败的解决方法: ```java // 引入Dubbo依赖 <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> // 配置Dubbo提供者 @Configuration @EnableDubbo(scanBasePackages = "com.example.provider") public class DubboProviderConfig { @Bean public ProviderConfig providerConfig() { ProviderConfig providerConfig = new ProviderConfig(); providerConfig.setTimeout(5000); return providerConfig; } @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("dubbo-provider"); return applicationConfig; } @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress("zookeeper://127.0.0.1:2181"); return registryConfig; } @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20880); return protocolConfig; } } // 提供者服务接口 public interface HelloService { String sayHello(String name); } // 提供者服务实现 @Service(version = "1.0.0") public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } // 启动类 @SpringBootApplication public class DubboProviderApplication { public static void main(String[] args) { SpringApplication.run(DubboProviderApplication.class, args); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值