四、soul源码学习-dubbo项目本地运行

一、搭建dubbo示例代码

  • 搭建自己的dubbo项目:示例代码:https://github.com/wyc192273/soul-learn-project/tree/main/dubbo-demo

  • 接下来,我们dubbo的provider项目引入如下依赖:

    
     
            org.dromara
            soul-spring-boot-starter-client-apache-dubbo
            ${last.version}
    
    
  • 如果用的Alibaba Dubbo 2.6.X 的话,用如下依赖:


 
        org.dromara
        soul-spring-boot-starter-client-alibaba-dubbo
        ${last.version}

  • 在我们自己的provider项目中,修改application.yaml文件添加如下配置:
soul:
  # Soul 针对 Dubbo 的配置项,对应 DubboConfig 配置类
  dubbo:
    admin-url: http://127.0.0.1:9095 # Soul Admin 地址
    context-path: /user-api # 设置在 Soul 网关的路由前缀,例如说 /order、/product 等等。
                            # 后续,网关会根据该 context-path 来进行路由
    app-name: user-service # 应用名。未配置情况下,默认使用 Dubbo 的应用名
  • 在Dubbo Service的实现类的方法上,添加@SoulDubboClient注解,用于设置每个Dubbo方法的soul网关对应的请求路径
@DubboService(group = "user", version = "1.0.0")
public class UserServiceImpl implements UserService {

    @Override
    @SoulDubboClient(path = "/getUser")
    public String getUser(Integer id) {
        return "user_" + id;
    }
}
  • 设置dubbo插件

    需要设置soul的dubbo插件为开启状态,访问http://localhost:9095/#/system/plugin

    image.png

    dubbo插件,配置注册中心的地址,可以是zookeeper或nacos, 默认是zookeeper配置

    {"register":"zookeeper://localhost:2181"}
    {"register":"nacos://localhost:8848"}
    
  • 启动dubbo项目,这个时候去http://localhost:9095/#/plug/dubbo,发现选择器和规则注册成功

image.png

二、网关接入dubbo

  • apache-dubbo用户引入如下依赖: nacos和zookeeper可以根据自己选择配置相关依赖

    
            
                org.dromara
                soul-spring-boot-starter-plugin-apache-dubbo
                ${soul.last.version}
            
    
            
                org.apache.dubbo
                dubbo
                2.7.5
            
            
                org.apache.zookeeper
                zookeeper
                3.4.5
            
           
             
                 org.apache.dubbo
                 dubbo-registry-nacos
                 2.7.5
             
             
                 com.alibaba.nacos
                 nacos-client
                 1.1.4
             
             
    
            
            
                org.apache.curator
                curator-client
                4.0.1
            
            
                org.apache.curator
                curator-framework
                4.0.1
            
            
                org.apache.curator
                curator-recipes
                4.0.1
            
            
    
  • alibaba-dubbo用户dubbo插件依赖换成下面的即可:

    
    
      org.dromara
      soul-spring-boot-starter-plugin-alibaba-dubbo
      ${last.version}
    
    
    
  • 重启网关服务即可

三、调用网关的dubbo接口

调用网关的dubbo接口,必须使用post方式调用网关,并且content-type是application/json,用body传参数的json字符串的形式

  • 单个java bean参数类型,默认支持,代码如下
@SoulDubboClient(path = "/getUser")
public String getUser(Integer id) {
  return "user_" + id;
}

getUser方法调用,使用postman调用,如图所示

image.png

单个参数,参数是对象形式传参:

@Override
@SoulDubboClient(path = "/saveUser")
public Object saveUser(User user) {
    return user;
}
image.png
  • 多个参数支持
@Override
@SoulDubboClient(path = "/replaceUser")
public Object replaceUser(int id, String name, User user) {
  System.out.println(user);
  user.setId(id);
  user.setName(name);
  return user;
}
image.png

这里要注意,参数的顺序要和dubbo的顺序一致,否则会有问题

四、总结

soul的dubbo实现,实际上就是 http请求 --> 网关 --> dubbo provider 这样一个流程。

网关将http协议请求,通过使用dubbo泛化调用 的方式 调用到我们的dubbo服务

你可能感兴趣的:(四、soul源码学习-dubbo项目本地运行)