1、Dubbo消费调用
上文我们总结了Dubbo的服务提供者如何进行sdk及服务的发布,本文将简单描述其他服务该如何调用该接口,新建一个springboot的gateway工程,此处不对该工程进行详细描述,只是举例消费调用方式
1.1、新建gateway工程
新建gateway工程,springboot版本、dubbo版本等要与之前的ac服务(生产者)保持一致,结构大致如下:
pom文件需要引入ac-client发布的sdk,如下:其他maven引用省略
<dependencies>
<dependency>
<groupId>com.cj.ac</groupId>
<artifactId>ac-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<type>pom</type>
<exclusions>
<exclusion>
<artifactId>slf4j-reload4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
1.2、测试调用
新建一个测试接口,本文在AppController中写的测试接口, 如下:
@DubboReference:dubbo服务注入,低版本为@Reference(需注意自己引用的Apache还是Alibaba的),其中retries为重试次数,version为服务实现的版本号,lazy为懒加载模式(可在一定程度上解决各服务启动顺序的问题,如果不配置懒加载,服务启动时会去验证该接口是否有服务提供者,如果没有,则抛出异常,而懒加载则是在该接口真正调用时才会验证是否有提供者,不影响启动)
/**
* 应用前端控制器
*
* @Author: changjiang
* @date: 2024/7/24 17:33 in beijing
*/
@RestController
@RequestMapping("/app")
public class AppController {
@DubboReference(retries = 3,version = "1.0.0",lazy = true)
private RemoteUserInfoService userInfoService;
/**
* 测试dubbo连通性接口,获取用户信息
*
* @param id
* @return
*/
@GetMapping("/testUser")
public Object testUser(@RequestParam Long id){
return userInfoService.findById(id);
}
}
1.3、配置文件
如果该应用不再对外提供dubbo服务,则不需要在启动入口配置@EnableDubbo注解来声明了,只需要在配置文件中配置dubbo相关配置即可。注意一下几点:
dubbo.application.name:dubbo唯一标识,不可重复
qos-enable:false:是否启用qos命令,QoS这个概念指用于动态的对服务进行查询和控制,在本环境中是指,是否允许反向控制dubbo服务,即通过zookeeper对dubbo服务进行上下线等操作,方便我们对dubbo进行控制,具体qos相关说明,可查看QOS 概述 | Apache Dubbo,本文不使用该配置,以减少端口占用等其他引申问题。
dubbo:
application:
name: GatewayStarter
qos-enable: false
protocol:
name: dubbo
port: -1
registry:
address: zookeeper://127.0.0.1:2181
1.4、启动服务
启动该服务后,同样可以在zookeeper工具中查看到该服务,启动日志及zookeeper如下:
1.5、测试验证
通过postman等其他接口调用gateway服务的测试接口
2、总结
至此我们完成了以此dubbo从服务发布到服务调用的一整个流程,后续我们将针对其他各点的总结,如集成trace及日志配置、集成redis、aop切面及动态配置等。