SpringBoot整合Dubbo+Zookeeper

这篇具有很好参考价值的文章主要介绍了SpringBoot整合Dubbo+Zookeeper。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实践前知识储备

Dubbo概述

学习Dubbo前你要了解这些

安装zk

Zookeeper概述与安装

Dubbo在zk中的存储结构

springboot整合dubbo和zk,Dubbo+ Zookeeper,spring boot,dubbo,后端

Dubbo的注册中心有哪些

1、Multicast:Multicast 注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。

2、Zookeeper是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用;

3、Nacos 是 Dubbo 生态系统中重要的注册中心实现,其中 dubbo-registry-nacos 则是 Dubbo 融合 Nacos 注册中心的实现。

4、基于 Redis 实现的注册中心 。

5、Simple注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。

Dubbo支持的协议

dubbo、rmi、hessian、http、webservice、rest、thrift、memcached、redis、grpc

Dubbo官方推荐使用 dubbo协议

Dubbo整合SpringBoot

本案例工程结构

dubbo-boot pom父工程
dubbo-boot-bean java bean
dubbo-boot-interface 接口服务
dubbo-boot-user-service 服务提供者
dubbo-boot-consumer 服务消费者、

具体实现

创建dubbo-boot 父工程

引入maven依赖

 <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <!-- 导入spring-boot-dependencies所管理的maven依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Dubbo -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.2.0</version>
            </dependency>

            <!-- mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.2</version>
            </dependency>

            <!-- pagehelper -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.10</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

在dubbo-boot 父工程下创建bean工程

maven依赖

 <artifactId>dubbo-boot-bean</artifactId>

  <dependencies>
        <dependency>
            <artifactId>dubbo-boot-bean</artifactId>
            <groupId>com.etoak.et2001.dubbo</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

在dubbo-boot 父工程下创建interface工程

maven依赖

    <artifactId>dubbo-boot-interface</artifactId>

    <dependencies>
        <dependency>
            <artifactId>dubbo-boot-bean</artifactId>
            <groupId>com.etoak.et2001.dubbo</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

在dubbo-boot 父工程下创建consumer工程

maven依赖

   <artifactId>dubbo-boot-consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.etoak.et2001.dubbo</groupId>
            <artifactId>dubbo-boot-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

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

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

消费者注册到zookeeper

application.yml文件

server:
  port: 8080

dubbo:
  application:
    name: user-service-consumer
  registry:
    address: zookeeper://192.168.149.128:2181

启动类

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

在dubbo-boot 父工程下创建user-service工程

maven依赖

配置数据源整合mybatis

  <artifactId>dubbo-boot-user-service</artifactId>
    <dependencies>
        <!-- interface -->
        <dependency>
            <artifactId>dubbo-boot-interface</artifactId>
            <groupId>com.etoak.et2001.dubbo</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

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

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

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!-- pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
        </dependency>

        <!-- dubbo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

服务提供方user-service注册到zookeeper 并声明使用Dubbo协议端口为20080

application.yml文件

server:
  port: 9090

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/user?serverTimezone=GMT
    username: root
    password: etoak

mybatis:
  type-aliases-package: com.etoak.bean
  mapper-locations: classpath:mappers/*.xml

pagehelper:
  reasonable: true

# Dubbo配置
dubbo:
  application:
    name: user-service
  registry:
    address: zookeeper://192.168.149.128:2181
  protocol:
    name: dubbo
    port: 20880

启动类

@SpringBootApplication
@MapperScan(basePackages = "com.etoak.mapper")
@EnableDubbo
public class UserServiceApp {
     public static void main(String[] args) {
         SpringApplication.run(UserServiceApp.class, args);
     }
}

开发两个接口进行测试

根据id查询用户

查询用户列表

实现步骤

在dubbo-boot-bean中开发User.java

@Data
public class User implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    private Integer status;
    private String createTime;
}

在dubbo-boot-bean中开发PageVo.java 分页查询时使用

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageVo<T> implements Serializable {

    private int pageNum;
    private int pageSize;
    private List<T> rows;
    private long total;
    private int pageCount;

}

在dubbo-boot-interface中开发UserService接口

/**
 * 服务接口
 */
public interface UserService {

    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    User getById(int id);

    /**
     * 分页查询
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageVo<User> queryList(int pageNum, int pageSize);

}

在dubbo-boot-user-service中开发UserMapper接口

public interface UserMapper {

    User getById(int id);

    List<User> queryList();

}

在dubbo-boot-user-service中开发UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.etoak.mapper.UserMapper">

    <sql id="base_sql">
        id, name, age, status, create_time AS createTime
    </sql>

    <select id="getById" parameterType="int" resultType="user">
        SELECT
            <include refid="base_sql"></include>
            FROM user
           WHERE id = #{value}
    </select>

    <select id="queryList" resultType="user">
        SELECT
            <include refid="base_sql"></include>
            FROM user
    </select>


</mapper>

在dubbo-boot-user-servcie中开发UserService接口

//注意这里的@Service注解为Dubbo包下的
import com.alibaba.dubbo.config.annotation.Service;
@Service // 发布Dubbo服务
@Slf4j     // 实现   dubbo-boot-interface工程下的 UserService 
public class UserServiceImpl implements UserService {

    @Resource
    UserMapper userMapper;

    @Override
    public User getById(int id) {
        log.info("getById param id - {}", id);
        return userMapper.getById(id);
    }

    @Override
    public PageVo<User> queryList(int pageNum, int pageSize) {
        log.info("queryList param paegNum - {}, pageSize - {}",
                pageNum, pageSize);
        // 设置分页条件
        PageHelper.startPage(pageNum, pageSize);
        // 查询用户列表
        List<User> userList = userMapper.queryList();
        // 创建PageInfo
        PageInfo<User> pageInfo = new PageInfo(userList);
        // 返回结果
        return new PageVo<User>(pageInfo.getPageNum(),
                pageInfo.getPageSize(),
                userList,
                pageInfo.getTotal(),
                pageInfo.getPages());
    }
}

在dubbo-boot-consumer开发两个接口

也可以单独建个Controller 我这里直接写在启动类了

@SpringBootApplication
@EnableDubbo
@RestController
@RequestMapping("/user")
public class ConsumerApp {

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

    // 订阅远程服务
    @Reference(timeout = 3000)
    UserService userService;

    @GetMapping("/{id}")
    public User getUser(@PathVariable int id) {
        return userService.getById(id);
    }

    @GetMapping("/list")
    public PageVo<User> queryList(
    @RequestParam(required = false, defaultValue = "1") int pageNum,
    @RequestParam(required = false, defaultValue = "10") int pageSize) {
        return userService.queryList(pageNum, pageSize);
    }

}

测试

  • 先启动zookeeper,dubbo控制台

  • 再启动服务提供者(dubbo-user-service)

  • 再启动服务消费者(dubbo-mvc-consumer)

  • 最后调用

    http://localhost:8080/user/{id}

    http://localhost:8080/user/list文章来源地址https://www.toymoban.com/news/detail-766023.html

到了这里,关于SpringBoot整合Dubbo+Zookeeper的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Dubbo与Zookeeper、SpringMVC整合和使用(入门级)

    介绍就不过多的说明。可以参考http://blog.csdn.net/congcong68/article/details/41113239博客里面写的相关介绍。 后续会补充完善SpringMVC部分 微信扫一扫,支持一下我的个人微信小程序 开发工具 MyEclipse 10.7 JDK 1.7 容器 Tomcat 8(运行dubbo) zookeeper版本 zookeeper-3.4.6 dubbo dubbo-admin-2.5.3 dubbo-admin-

    2024年02月22日
    浏览(33)
  • windows idea 整合dubbo zookeeper bug记录

    先说两句题外话 激动地心!颤抖的手!恨不得在此刻,半夜两点仰天长啸!我特码运行起来辣!!!! 别问,问就是一个小问题debug8个小时精神恍惚瞎猫碰上死耗子把问题解决了,只能说,麻了 回归正题,接下来简述一下springboot整合zookeeper 和 dubbo的流程和途中碰到问题  

    2024年02月04日
    浏览(37)
  • SpringBoot + Dubbo + zookeeper实现

    目录 一,框架搭建 1. 启动zookeeper ! 2. IDEA创建一个空项目; 3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可 4.项目创建完毕,我们写一个服务,比如卖票的服务 编写接口 编写实现类 编写service 二,服务提供者 1,第一步  zookeeper的包我们去maven仓库下载,

    2024年04月26日
    浏览(30)
  • springboot+dubbo+zookeeper 项目实战

    现在有一段代码再前台,后台系统中都存在,都需要这段代码,存在这种情况,我们可以选择将这段代码提取出来作为一个服务,让前台和后台系统作为消费者远程调用这段代码,提高了代码的复用性。 springboot集成dubbo dubbo框架总结 因此我们需要使用dubbo,也就是rpc协议。

    2024年02月03日
    浏览(26)
  • SpringBoot学习(八)-SpringBoot + Dubbo + zookeeper

    1)什么是分布式系统? 在《分布式系统原理与范型》一书中有如下定义:“ 分布式系统是若干独立计算机的集合 ,这些计算机对于用户来说就 像单个相关系统 ”; 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统 。分布式

    2024年02月02日
    浏览(58)
  • dubbo之整合SpringBoot

    目录 zookeeper安装 1.拉取ZooKeeper镜像 2.新建文件夹 3.挂载本地文件夹并启动服务 4.查看容器 5.进入容器(zookeeper) Dubbo Admin安装 1.下载dubbo-admin  2.zip包解压  3.修改配置文件  4.打包项目  5.启动jar 6.访问  构建项目 api模块 1.创建实体类 2.创建测试接口 生产者模块 1.导入依赖

    2024年02月13日
    浏览(21)
  • SpringBoot~ dubbo + zookeeper实现分布式开发的应用

    配置服务名字, 注册中心地址, 扫描被注册的包 server.port=8081 #当前应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #扫描指定包下服务 dubbo.scan.base-packages=com.demo.service 实现一个接口,在接口中完成需求 public interface Translate { String tran

    2024年04月10日
    浏览(42)
  • springboot+dubbo项目启动项目时报错 zookeeper not connected

    项目在公司网络启动时,能正常启动。但通过vpn连接到公司网络时却无法启动报下面的错误 java.lang.IllegalStateException: zookeeper not connected 。 猜测:连接到zookeeper的服务器网络策略不通 — 通过telnet证实端口网络时通的。该猜测不成立。 进一步经过报错的日志,找到对应的源码

    2024年02月11日
    浏览(30)
  • 微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

    🏷️ 个人主页 :鼠鼠我捏,要死了捏的主页  🏷️ 系列专栏 :Golang全栈-专栏 🏷️ 个人学习笔记,若有缺误,欢迎评论区指正   前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 快速上手

    2024年02月19日
    浏览(31)
  • Springboot3.X整合Dubbo3.XSpringCloudAlibaba微服务 2022.0 + Springboot3.X 集成 Dubbo实现对外调用http内部调用RPC

    近期自己新开了一套SpringCloud Alibaba微服务项目,接口使用了对外HTTP,内部RPC的设计,具体点说就是外部用户或客户端通过Nginx访问到Gateway网关再分发到各个服务,内部各个服务之间统一使用Dubbo RPC进行通信。下面是Springboot3.x集成Dubbo的分享: 1. 需要的关键依赖 2. 启动程序入

    2024年02月15日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包