日期 | 更新说明 |
---|---|
2024年4月13日 | dubb rest 协议 |
简介
在Dubbo中将服务远程调用中,将暴露 REST 服务成为可能;使其可以方便使用Dubbo的方式调用 REST 服务(作为服务的消费者),同时也很方便的将原有的服务发布成为 RETST 服务(作为服务提供者)。用官方文档的原话如下:
为dubbo添加REST调用后,可以实现服务的"一次编写,到处访问",理论上可以面向全世界开放,从而真正实现比较理想化的面向服务架构(SOA)
目前官方3.3的版本中,使用 tri
协议是完全兼容 reset
协议的。也就是对于传统支持的 Dubbo
协议的应用,只需要升级到指定的版本,然后通过简单改造就可以将原来的Dubbo的服务,同时发布成为具有 rest
协议的服务。值得重点说明的是Dubbo3在新的版本中开始支持的 springmvc
的注解的,这是以前的 DubboX
以前不具备的能力。
从这里也可以看出 Dubbo
在为跨语言调用,以及支持 Spring Cloud
体系做出了更多的支持
开始 -- Dubbo 的 Rest 案例体验
备注案例使用 dubbo-3.3.0-beta.2 的版本,如果仓库没有发布的的话,请自行编译吧
- 引入相关依赖
xml
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.3.0-beta.2</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.3.0-beta.2</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-zookeeper-curator5-spring-boot-starter</artifactId>
<version>3.3.0-beta.2</version>
</dependency>
<!-- spring boot starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springboot.version}</version>
<scope>test</scope>
</dependency>
- 接口类
UserService
类
less
@RequestMapping("/user")
public interface UserService {
@GetMapping("findUserId/{id}")
String findUserNameById(@PathVariable String id);
@GetMapping("hello")
String sayHello();
}
·UserServiceImpl·类
typescript
@DubboService
public class UserServiceImpl implements UserService {
public Map<String, String> userRepository = Map.of("1", "dubbo", "2", "apache");
@Override
public String findUserNameById(String id) {
if (!userRepository.containsKey(id)) {
throw new RuntimeException(id + " not found");
}
return "id : " + id + " name : " + userRepository.get(id);
}
@Override
public String sayHello() {
return "hell world, dubbo";
}
}
- 配置
application.yml
yaml
server:
port: 8081
dubbo:
application:
name: dubbo-springboot-rest-springmvc
qos-port: 33333
registry:
address: zookeeper://${zookeeper.address:127.0.0.1}:2181
protocol:
name: tri
port: 50052
logging:
level:
root: info
启动SpringBoot项目让我测试一下吧
bash
curl http://localhost:50052/user/findUserId/1
curl http://localhost:50052/user/findUserId/2
curl http://localhost:50052/user/hello
如下图所示结果,至此案例结束,使用起来还是很方便的。
github链接:github.com/will-we/blo...