SpringBoot+ZooKeeper+Dubbo实战

前言

周末总结了一下SpringBoot项目集成ZooKeeper以及Dubbo,记录一下学习过程。

1. ZooKeeper简介

ZooKeeper: A Distributed Coordination Service for Distributed Applications

ZooKeeper 是一个开源的分布式协调服务。
Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。
ZooKeeper的安装在此不做过多的描述。安装完后的目录如下:

在这里插入图片描述
可以通过bin目录下的zkServer.sh文件启动ZooKeeper。启动命令如下:

./zkServer.sh start &

查看ZooKeeper的运行状态:

./zkServer.sh status

运行结果如下:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

出现上面的界面,代表ZooKeeper 启动成功。

2. Dubbo-admin简介

Dubbo-admin是一个可以通过web查看dubbo的管理控制台。
我们可以从网上把Dobbo-admin的war包下载下来,然后放到服务器的Tomcat目录webapps中,启动Tomcat即可运行Dobbo-admin。关于Tomcat的启动,大家可以搜一下,网上资料很多,在此不做详细描述。
这里分享一个dobbo-admin的war包下载地址,网上找了很多都没有下载到。
链接:dubbo-admin ,提取码: 6a3h
启动后的界面如下:
在这里插入图片描述

3. SpringBoot集成

这里通过两个项目来演示。一端为Provider、另一端为Customer。因工程为商业项目,文章中只贴出部分代码。

3.1 Provider

在SpringBoot项目中集成Dubbo+ZooKeeper框架
首先pom.xml 文件中添加依赖。

 <!--引入springboot整合dubbo的jar包-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

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

其次,在Application上添加注解@EnableDubbo。

@SpringBootApplication()
@ServletComponentScan
@EnableDubbo
@ComponentScan(basePackages = {"com.ctpia"})
public class V1Application {
    public static void main(String[] args) {
        SpringApplication.run(V1Application.class, args);
    }
    @Bean({"threadPoolTaskExecutor", "webMvcAsyncTaskExecutor"})
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        return new ThreadPoolTaskExecutor();
    }
}

新建业务逻辑接口CreateService

public interface CreateService {
    int query(String mobile);
}

新建业务逻辑实现类 CreateServiceImpl

import com.alibaba.dubbo.config.annotation.Service;
import com.ctpia.qgw.v1.service.CreateService;
import org.springframework.web.bind.annotation.ResponseBody;

@Service
public class CreateServiceImpl implements CreateService {

    @ResponseBody
    @Override
    public int query(String mobile) {
        return 100;
    }
}

这里的@Service注解一定是com.alibaba.dubbo.config.annotation.Service这个包下的。
application.yml中添加配置

dubbo:
  application:
    name: dubbo-provider
  protocol:
    name: dubbo
    port: 20880
  registry:
    address: zookeeper://(服务器IP地址):2181

启动SpringBoot项目,我们可以看到日志:

在这里插入图片描述

3.2 Customer

pom.xml中添加依赖。

  <!--引入springboot整合dubbo的jar包-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>

Application启动类添加注解@EnableDubbo

@EnableDubbo
@SpringBootApplication
public class ServerApplication {

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

}

application.yml 中添加配置

dubbo:
  application:
    name: dubbo-customer
  registry:
    address: zookeeper://(服务器IP):2181

控制器ServerController的代码如下:

import com.alibaba.dubbo.config.annotation.Reference;
import com.ctpia.qgw.v1.service.CreateService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/v1")
public class ServerController {

    @Reference
    CreateService searchService;

    @RequestMapping(value = "/query", method = RequestMethod.GET)
    public String query() {
        return searchService.query("1111") + "";
    }

}

CreateService记住要使用注解Reference引用。CreateService的代码如下:

public interface CreateService {
    int query(String mobile);
}

项目的目录结构如下图所示:
在这里插入图片描述
启动SpringBoot 项目,可以看到连接成功的信息如下图所示。
在这里插入图片描述

3.3 测试结果

浏览器输入http://localhost:8081/v1/query,看到返回结果。
在这里插入图片描述
通过Dubbo-admin我们可以看到我们注册的服务,如下图所示。
在这里插入图片描述

4. 总结

当看到一个新的知识点的时候,希望大家可以动手去实践一下,真正自己操作的时候,可能会遇到各种错,解决错误才是我们学习中收货最大的。大家有不明白的可以留言。
最后:不卑不亢,一起努力。@qianhui

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

le4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值