springboot使用dubbo(一、快速使用)

64 阅读2分钟

第一次我们简单使用dubbo,做一个服务的RPC调用,下一节我们使用nacos进行注册

1.引入maven依赖,放到根目录下

<!--可选        -->        
<dependency>
            <groupId>org.apache.dubbo.extensions</groupId>
            <artifactId>dubbo-serialization-kryo</artifactId>
            <version>1.0.1</version>
        </dependency>
            
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.8</version>
        </dependency>

注意选择兼容的版本。kryo作为序列化工具,因为dobbo能够做一些参数传递,对象的序列化很重要,不过默认的序列化方案Hessian也是可以的,选择默认就不要加第一个依赖。

2.创建公共模块,消费者和生产者

借下之前的rocketmq模块测试,如下:

api:存放Dubbo 服务定义,和公共类等两个需要共用的代码

consumer:用于调用服务

producer:用于提供服务实现

image.png

3个模块的springboot相关依赖自行添加,注意只有consumer和producer才要启动类,api创建一个包即可

3.在api里面添加接口

image.png

public interface DemoService {
    String say(String arg);
    String eat(String arg1,String arg2);
}

4.编写服务提供者producer

yml配置文件中加上

#随便命名
spring:
  application:
    name: DUBBO-PRODUCER
   
dubbo:
  protocol:
    name: dubbo
    port: -1

protocol是网络协议,这边使用dubbo的网络协议,大概是网址前面的https:变成dubbo:

编写实现类

注意@DubboService,这样才能让dubbo管理到

@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String say(String arg) {
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append("service说了:");
        stringBuilder.append(arg);
        return stringBuilder.toString();
    }

    @Override
    public String eat(String arg1, String arg2) {
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append(arg1);
        stringBuilder.append(" 吃了 ");
        stringBuilder.append(arg2);
        return stringBuilder.toString();
    }
}

最后在启动类加上@EnableDubbo

@EnableSwagger2
@EnableDubbo
@SpringBootApplication
public class ProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }

}

启动!

可以看到dubbo的代理网址,RPC成功,如果显示没有某个类,那么可能你的dubbo版本依赖和springboot不匹配,适当修改即可

image.png

4.编写服务调用者

一样先写yml

server:
  port: 8093
spring:
  application:
    name: DUBBO-CONSUMER
dubbo:
  application:
    qos-enable: false

写一个控制层接口,把刚才的代理网址抄上去

@RestController
public class DemoConsumer {

    @DubboReference(url = "dubbo://192.168.182.1:20880/com.lgt.api.testApi.DemoService")
    private DemoService demoService;

    @GetMapping("/say")
    public String sayAny(@RequestParam String arg){
        String result=demoService.say(arg);
        return result;
    }

    @GetMapping("/eat")
    String eat(@RequestParam String who,String food){
        String result=demoService.eat(who,food);
        return result;
    }
}

启动!

5.调用服务

启动swagger文档管理或者postman,发送请求调用,

image.png

image.png

下节我们试着把nacos和dubbo联系在一起作为注册中心,当然以前的zookeeper也是可以的,不过nacos功能更强大。