SpringBoot集成Dubbo

环境准备

本文讲解SpringBoot和Dubbo的集成Demo,采用Zookeeper作为注册中心,我们首先要搭建一个Zookeeper的环境。
博主采用的Docker方式进行安装的,如需采用这种方式安装,请自行准备Docker环境支持。

也可以windows环境下安装zookeeper教程详解(单机版)

获取zookeeper镜像

docker pull zookeeper

主机上建立挂载目录和zookeeper配置文件

mkdir -p /home/data/zookeeper_data/conf 
mkdir -p /home/data/zookeeper_data/data 

启动容器

docker run -d --name zookeeper -p 2181:2181 --restart=always -v /home/data/zookeeper_data/data:/data -v /home/data/zookeeper_data/conf:/conf zookeeper:latest

项目结构

我们先用IDEA新建一个空项目,后面再进行添加Module。

image.png

然后新建一个Jar方式的API接口的一个Module,直接采用Maven方式新建就好了。

image.png

然后采用Spring Initialize方式添加两个Module(consumer、provider)。

image.png

最后项目结构就是这样啦

image.png

编码

API

准备好上面的代码接口我们开始写一个Demo进行一个测试。
首先在Api模块中,先自定义个TestApi的一个接口,写一个test方法。

package com.hammer.api;

public interface TestApi {
    String test();
}

写完后我们进行mvn install一下打包进仓库,因为后面模块需要引用找个包。

我们公共Api方法已经写好了,开始准备Dubbo两个重要的角色了,服务提供方和服务消费方,我们首先要准备POM文件,导入Dubbo相关依赖和我们之前准备的API包。provider和consumer两个模块的POM文件新增如下配置:

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.10</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.10</version>
        </dependency>

        <!-- 第一步新建的API包 -->
        <dependency>
            <groupId>com.hammer</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

Provider

yml配置:

application.yml增加Dubbo相关配置。

dubbo:
  application:
    name: provider
  registry:
    address: zookeeper://xxx.xxx.xxx:2181 #ZK注册中心地址

服务提供:

新建一个service类,实现API中的TestApi接口,实现方法test(),注意:我们这里的重点是Duubo的注解,@DubboService修饰于Service类上,代表这个服务提供到注册中心。

package com.hammer.provider.service;

import com.hammer.api.TestApi;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class TestApiImpl implements TestApi {

    @Override
    public String test() {
        return "你好,世界!";
    }
}

启动类加上开启Dubbo注解。

package com.hammer.provider;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubbo
@SpringBootApplication
public class ProviderApplication {

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

}

到这里我们的服务提供方就写完了,是不是很简单呢,重点就是@DubboService

Consumer

yml配置

同样application.yml增加Dubbo相关配置。

dubbo:
    application:
        name: consumer
    registry:
        address: zookeeper://xxx.xxx.xxx:2181
server:
    port: 8081  #应为我这里是将服务起在一台电脑, 和生产者的tomcat端口区分以免冲突

服务消费

服务消费我们采用接口访问进行展示,所以我们POM需要增加web支持,在创建时已经勾选了就不用加了。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

我们新建一个Controller类,写一个测试方法,提供一个接口出去,我们引用注解@DubboReference依赖注入提供者提供的服务,然后直接调用服务方法即可。

package com.hammer.consumer.controller;

import com.hammer.api.TestApi;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestApiController {

    @DubboReference
    private TestApi testApi;

    @GetMapping("/test")
    public String test(){
        return testApi.test();
    }
}

测试

相关演示案例我们就写完了,开始进行一个测试验证,首先启动生产者(provider)再次启动消费者(consumer),打开浏览器访问http://localhost:8081/test即可看到有结果输出,此结果就是生产者实现接口返回的。

image.png

进行验证,运行命令进入Docker Zookeeper容器。

docker exec -it 容器id   /bin/bash

然后进入容器内部bin目录,连接ZK,执行命令。

./zkCli.sh

连接成功后我们输入相关命令来查看ZK内部服务相关数据,可以看到已经有我们写的TestApi服务已经成功注册ZK里了。

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值