Springboot 集成dubbo 使用dubbo-spring-boot-starter

概述:

Dubbo是阿里开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。同时Dubbo更是SOA服务治理的一种方案。

我们常常使用RestFul接口,以HTTP+JSON的形式暴露接口,但如果这样的接口很大,也是一种麻烦,所以有一种SOA的治理方案,这样可以暴露Dubbo服务接口,提供给Dubbo消费者使用RPC调用。

准备:

要使用dubbo,需要先安装zookeeper,当然也可以配合使用redis, memcache,zookeeper可以形象的理解为动物园,dubbo就是动物园的动物。

Zookeeper单机安装:

在这里:http://mirror.bit.edu.cn/apache/zookeeper/下载zookeeper,本人使用是zookeeper-3.4.13版本

下载后上传到自己的linux服务器,解压

目录结构如下:

在这个目录下新建 data, dataLog目录

进入conf目录,执行下面命名,配置zookeeper配置文件:

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

在zoo.cfg文件中,新增如下两条指令:

这样就可以运行zookeeper了,运行命令如下:

在zookeeper/bin目录下,有个zkServer.sh文件

./zkServer.sh start

查看zookeeper运行状态:

./zkServer.sh status

zookeeper的默认端口是 2181,可以在conf/zoo.cfg文件中配置,使用时需要注意防火墙关闭 端口打开问题

Springboot集成Dubbo:

新建一个springboot工程:

在pom.xml中添加dubbo依赖,我这里使用的是dubbo-spring-boot-starter

<!-- https://mvnrepository.com/artifact/com.alibaba.spring.boot/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>

添加dubbo-common, dubbo-provider, dubbo-consume模块,目录结构如下:

在dubbo-common模块中新建接口类,以及要传输的对象:

注意要传输对象必需实现Serializable类,以便序列化/反序列化

public class Student implements Serializable{
    private static final long serialVersionUID = 2870421919462807431L;

    private Long id;
    private String name;
    private Long age;

    public Student(Long id, String name, Long age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getAge() {
        return age;
    }

    public void setAge(Long age) {
        this.age = age;
    }
}
public interface StudentDubboService {
    Student findInfoByName(String name);
}

dubbo-common目录结构如下:

 

在dubbo-provider实现dubbo接口:

@Service(version = "1.0.0", interfaceClass = StudentDubboService.class)
@Component
public class StudentDubboServiceImpl implements StudentDubboService, Serializable {

    private static final long serialVersionUID = 1780842571227587761L;

    @Override
    public Student findInfoByName(String name) {
        return new Student(1L, "Jack", 18L);
    }
}

在Main函数中打开Dubble:

@SpringBootApplication
@EnableDubboConfiguration    //使用dubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

在application.properties中配置dubbo:

server.port=8082

## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.server=true
spring.dubbo.registry.address=zookeeper://192.168.61.196:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.eric.common.service

说明:

1、spring.dubbo.registry.address是我刚才安装zookeeper的服务器地址,2181就是刚才zookeeper的默认端口

2、spring.dubbo.scan扫描的是dubbo-common模块中的接口

 

配置dubbo-consume:

使用dubbo注册好的接口类:

@Component
public class StudentDubboConsumeImpl {
    @Reference(version = "1.0.0")
    StudentDubboService studentDubboService;

    public void printCity(){
        String cityName = "HZCity";
        Student student = studentDubboService.findInfoByName(cityName);
        System.out.println(student.toString());
    }
}

在Main函数中打开 Dubbo:

@SpringBootApplication
@EnableDubboConfiguration
public class ConsumeApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumeApplication.class, args);
    }
}

配置application.properties:

## 避免和 server 工程端口冲突
server.port=8081

## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://192.168.61.196:2181
spring.dubbo.scan=com.eric.common.service

在dubbo-consume中写一个测试controller,具体如下:

@RestController
public class TestController {
    @Reference(version = "1.0.0")
    private StudentDubboService studentDubboService;

    @GetMapping("test")
    public String test(){
        Student student = studentDubboService.findInfoByName("Jack");
        System.out.println(student.getName() + " " + student.getAge());
        return "end";
    }
}

 

 

测试使用:

分开启动dubbo-provider, dubbo-consume模块,运行后可以看到这些日志

在浏览器中输入测试controller url:

http://localhost:8081/test

可以看到输出:

 

这样一个springboot集成dubbo的工程就可以了,我们可以看到8082端口的服务器 可以调用8081端口的服务器 接口。

可以在这里进行下载:

https://download.csdn.net/download/herojuice/10932507

说明:

这里只是对dubbo集成做下介绍,后续会讲原理以及源码解析

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值