【25年最新版】快速上手dubbo实现rpc远程过程调用


部分内容来自:https://bugstack.cn/md/road-map/dubbo.html

一、Dubbo 是什么

Dubbo 是阿里巴巴开源的一款高性能、轻量级的 Java RPC(Remote Procedure Call,远程过程调用)框架。它主要用于构建分布式服务架构,帮助开发人员实现服务之间的高效通信和治理。在分布式系统中,不同的服务可能部署在不同的机器上,Dubbo 提供了一种简单而强大的方式来让这些服务相互调用,就好像它们在本地调用一样。

二、踩坑点

1. Serializable 接口

所有的 Dubbo 接口,出入参,默认都需要继承 Serializable 接口。

public interface IUserService {

    Response<UserResDTO> queryUserInfo(UserReqDTO reqDTO);

}
// UserReqDTO、UserResDTO、Response 这3个类,都得继承 Serializable 序列化接口。

2. @Service


@DubboService(version = "1.0.0")
public class UserService implements IUserService {
...

Dubbo 提供了 @DubboService 注解。但是Dubbo 版本 2.7.* 它的注解也是 @Service,导入的时候别导入成 Spring 的 @Service了。

3. 工程配置

dubbo:
  application:
    name: paran-dubbo
    version: 1.0.0
  registry:
    address: zookeeper://127.0.0.1:2181 # N/A - 无zookeeper可配置 N/A 走直连模式测试
  protocol:
    name: dubbo
    port: 20881
  scan:
    base-packages: com.paran.dubbo.api

这里要注意
假如启动类在com.paran.dubbo包下,那么com.paran.dubbo.api要直接或者间接地通过pom.xml文件引入进来,Spring才能扫描到
另外Spring默认是扫描启动类所在包及其子包,不能把启动类放在com.paran.dubbo.a.b.xxx下面,这样也会扫描不到com.paran.dubbo.api

4. 引入jar包

有两个应用,一个Dubbo接口提供方、一个Dubbo接口使用方。在使用方使用接口的时候,需要引入接口提供方的jar包,例如接口提供方把com.paran.dubbo.api打包安装到maven仓库,接口使用方要把这个包引入进来。
执行服务提供方工程中的父pom的install,这时候子模块也会被install,引入的时候也是只引入子模块,但是如果只install子模块,在引入子模块的时候maven会报红

5. @EnableDubbo

服务提供方的启动类上要加上@EnableDubbo

三、使用流程

请添加图片描述
api

public interface ISomeService {
    Response<ResDTO> query(ReqDTO reqDTO);
}

trigger

@Slf4j
@DubboService(version = "1.0.0")
public class SomeService implements ISomeService {
    @Override
    public Response<ResDTO> query(ReqDTO reqDTO) {
        ResDTO resDTO = ResDTO.builder()
                .id(reqDTO.getId())
                .name("paran")
                .age(23)
                .build();

        // 2. 返回结果
        return Response.<ResDTO>builder()
                .code(Constants.ResponseCode.SUCCESS.getCode())
                .info(Constants.ResponseCode.SUCCESS.getInfo())
                .data(resDTO).build();
    }
}

app

@SpringBootApplication
@EnableDubbo
public class Application 
{
    public static void main( String[] args )
    {
        SpringApplication.run(Application.class);
    }
}

测试

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {
    @DubboReference(interfaceClass = ISomeService.class, version = "1.0.0")
    private ISomeService someService;
    @Test
    public void test_userService() {
        ReqDTO reqDTO = ReqDTO.builder().id("10001").build();
        Response<ResDTO> resDTO = someService.query(reqDTO);
        log.info("测试结果 req: {} res: {}", JSON.toJSONString(reqDTO), JSON.toJSONString(resDTO));
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值