在Spring cloud , Dubbo , nacos 使用@DubboReference 引用 服务对象,但是对象为空.
具体情况如下:
- Spring Boot使用的是3.1.2版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
- 使用Dubbo 和 nacos 具体引用如下:
<!-- dubbo: 远程调用-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- SpringCloud Ailibaba Nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0-RC2</version>
</dependency>
<!-- SpringCloud Ailibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2022.0.0.0-RC2</version>
</dependency>
<!-- 使用bootstrop.yml配置文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
- 定义有公共的api模块. 服务模块引用公共api模块. 订单项模块,代码如下:
@DubboService(interfaceClass = IOrderItemService.class)
@Component
public class OrderItemServiceImpl implements IOrderItemService{
... 略
}
- bootstrap.yml文件中,关于Dubbo的配置如下:
spring:
application:
name: orderDetail-api
main:
allow-bean-definition-overriding: true
cloud:
nacos:
discovery:
server-addr: 192.168.3.21:8848 #nacos服务注册、发现地址
#dubbo配置
dubbo:
scan:
base-packages: com.shop.orderdetail.service.impl #扫描服务所在的包
protocol:
name: dubbo #协议名称和协议端口
port: -1
host: 192.168.3.21
registry: #在spring cloud中心的注册地址
address: spring-cloud://localhost
启动类添加了@EnableDiscoveryClient引用,代码如下:
@SpringBootApplication @ComponentScan(basePackages = "com.shop") @EnableDiscoveryClient //Dubbo可以发现服务 public class OrderDetailApplication { 略 }
在购物车模块引用公共api模块,并且通过dubbo调用订单项模块的内容
@DubboReference(interfaceClass = IOrderItemService.class)
private IOrderItemService orderItemService;//订单详情服务的远程引用
问题:
在nacos服务页面可以看到服务提供者列表,但是在调用上面orderItemService对象时,这个对象为空.
nacos是部署在本机的单机模式,所以也应该不存在网络问题.