【SpringBoot整合Dubbo和Zookeeper】

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

本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分

目录

一、Dubbo

dubbo基本概念

调用关系说明

二、Dubbo环境搭建 

三、Window下安装zookeeper

1、下载zookeeper 

2、运行

3、测试

四、window下安装dubbo-admin

1、下载dubbo-admin

2、解压进入目录

3、在项目目录下打包dubbo-admin

4、执行

五、SpringBoot整合Dubbo + zookeeper

1、框架搭建

编写接口 

编写实现类

编写service 

2、服务提供者

1.导入Dubbo和zookeeper依赖

2.在springboot配置文件中配置dubbo相关属性

3.配置service的实现类中的服务注解并发布服务

3、服务消费者

1.导入依赖,和之前的依赖一样

2.配置参数

3.拿到服务提供者的接口

4. 完善消费者的服务类

5. 测试类编写

4、启动测试


【分布式系统理论和RPC】

一、Dubbo


Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。

了解Dubbo:Dubbo 简介 | Apache Dubbo

dubbo基本概念

在分布式系统中,尤其是随着微服务架构的发展,应用的部署、发布、扩缩容变得极为频繁,作为 RPC 消费方,如何动态的发现服务提供方地址成为 RPC 通信的前置条件。Dubbo 提供了自动的地址发现机制,用于应对分布式场景下机器实例动态迁移的问题。如下图所示,通过引入注册中心来协调提供方与消费方的地址,提供者启动之后向注册中心注册自身地址,消费方通过拉取或订阅注册中心特定节点,动态的感知提供方地址列表的变化。

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。

服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

调用关系说明

  • 服务容器负责启动,加载,运行服务提供者。
  • 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

二、Dubbo环境搭建 


Doubbo官方推荐使用 注册中心参考手册 | Apache DubboZookeeper 注册中心

 注册中心参考手册 | Apache Dubbo

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

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

流程说明:

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

支持以下功能:

  • 当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
  • 当注册中心重启时,能自动恢复注册数据,以及订阅请求
  • 当会话过期时,能自动恢复注册数据,以及订阅请求
  • 当设置 <dubbo:registry check="false" /> 时,记录失败注册和订阅请求,后台定时重试
  • 可通过 <dubbo:registry username="admin" password="1234" /> 设置 zookeeper 登录信息
  • 可通过 <dubbo:registry group="dubbo" /> 设置 zookeeper 的根节点,不配置将使用默认的根节点。
  • 支持 * 号通配符 <dubbo:reference group="*" version="*" />,可订阅服务的所有分组和所有版本的提供者

三、Window下安装zookeeper


1、下载zookeeper 

官网:Apache ZooKeeper

我的是3.5.6版本,官方建议使用 2.3.3 以上版本的 zookeeper 注册中心客户端

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

 然后解压zookeeper

2、运行

管理员身份运行 /bin/zkServer.cmd

可能会出现闪退(不会的忽略以下步骤,我没遇到这个情况)

解决方案:编辑zkServer.cmd文件末尾添加pause 。这样运行出错就不会退出,会提示错误信息,方便找到原因。

 springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

再运行zkServer.cmd可看到错误信息 conf下没zoo.cfg文件

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

修改zoo.cfg配置文件

将conf文件夹下面的zoo_sample.cfg复制一份改名为zoo.cfg即可。

注意几个重要位置:

dataDir=./   临时数据存储的目录(可写相对路径)

clientPort=2181   zookeeper的端口号

修改完成后再次启动zookeeper

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot​ 启动成功!

3、测试

启动zkCli.cmd测试,记得把服务zkServer.cmd也开了。

#列出zookeeper根下保存的所有节点

ls /

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

#创建一个kuangshen节点,值为123

create –e /kuangshen 123

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

#获取/kuangshen节点的值

get /kuangshen

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

四、window下安装dubbo-admin


dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。

但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不装也不影响使用。(不想用也可以不安装)

1、下载dubbo-admin

地址 :https://github.com/apache/dubbo-admin/tree/master

2、解压进入目录

修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址(没改过就不用)

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

3、在项目目录下打包dubbo-admin

没有maven的要去先下载和配置环境变量

mvn clean package -Dmaven.test.skip=true

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

等待打包完成 

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

4、执行

执行dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar (管理员身份运行)

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot注意:要打开zookeeper的服务

执行完毕,我们去访问一下 http://localhost:7001/ , 这时候我们需要输入登录账户和密码,我们都是默认的root-root;

登录成功后,查看界面

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot安装完成!

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

五、SpringBoot整合Dubbo + zookeeper


1、框架搭建

        1. 启动zookeeper !

        2. IDEA创建一个空项目。

        3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可。

        4.项目创建完毕,我们写一个服务,比如卖票的服务。

编写接口 

package com.kuang.provider.service;

public interface TicketService {
   public String getTicket();
}

编写实现类

package com.kuang.provider.service;

public class TicketServiceImpl implements TicketService {
   @Override
   public String getTicket() {
       return "《狂神说Java》";
  }
}

        5.创建一个模块,实现服务消费者:consumer-server , 选择web依赖即可。

        6.项目创建完毕,我们写一个服务,比如用户的服务。

编写service 

package com.kuang.consumer.service;

public class UserService {
   //我们需要去拿去注册中心的服务
}

2、服务提供者

1.导入Dubbo和zookeeper依赖

将服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包

我们从dubbo官网进入github,看下方的帮助文档,找到dubbo-springboot,找到依赖包

<!-- Dubbo Spring Boot Starter -->
<dependency>
   <groupId>org.apache.dubbo</groupId>
   <artifactId>dubbo-spring-boot-starter</artifactId>
   <version>2.7.3</version>
</dependency>   

zookeeper的包我们去maven仓库下载,zkclient

<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
   <groupId>com.github.sgroschupf</groupId>
   <artifactId>zkclient</artifactId>
   <version>0.1</version>
</dependency>

【新版的坑】zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖

<!-- 引入zookeeper -->
<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-framework</artifactId>
   <version>2.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-recipes</artifactId>
   <version>2.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.zookeeper</groupId>
   <artifactId>zookeeper</artifactId>
   <version>3.4.14</version>
   <!--排除这个slf4j-log4j12-->
   <exclusions>
       <exclusion>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
       </exclusion>
   </exclusions>
</dependency>

2.在springboot配置文件中配置dubbo相关属性

application.properties

#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.kuang.provider.service

3.配置service的实现类中的服务注解并发布服务

在service的实现类中配置服务注解,发布服务!注意导包问题

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

@Service //将服务发布出去--这个是dobbo的@Service
@Component //放在容器中--使用了Dubboh后尽量不要用spring的@service
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《狂神说Java》";
    }
}

逻辑理解 :应用启动起来,dubbo就会扫描指定的包下带有@component注解的服务,将它发布在指定的注册中心中!

3、服务消费者

1.导入依赖,和之前的依赖一样

<!--dubbo-->
<!-- Dubbo Spring Boot Starter -->
<dependency>
   <groupId>org.apache.dubbo</groupId>
   <artifactId>dubbo-spring-boot-starter</artifactId>
   <version>2.7.3</version>
</dependency>
<!--zookeeper-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
   <groupId>com.github.sgroschupf</groupId>
   <artifactId>zkclient</artifactId>
   <version>0.1</version>
</dependency>
<!-- 引入zookeeper -->
<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-framework</artifactId>
   <version>2.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-recipes</artifactId>
   <version>2.12.0</version>
</dependency>
<dependency>
   <groupId>org.apache.zookeeper</groupId>
   <artifactId>zookeeper</artifactId>
   <version>3.4.14</version>
   <!--排除这个slf4j-log4j12-->
   <exclusions>
       <exclusion>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
       </exclusion>
   </exclusions>
</dependency>

2.配置参数

#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址,可以在任何电脑上
dubbo.registry.address=zookeeper://127.0.0.1:2181

3.拿到服务提供者的接口

本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

4. 完善消费者的服务类

package com.kuang.service;

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;


@Service //注入到容器中--spring的@Service才能引用TicketService接口
public class UserService {

    @Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名(接口名:com.kuang.service.TicketService)
    TicketService ticketService;//引用, Pom坐标,可以定义路径相同的接口名

    public void bugTicket(){
        String ticket = ticketService.getTicket();
        System.out.println("在注册中心买到"+ticket);
    }

}

5. 测试类编写

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerServerApplicationTests {

   @Autowired
   UserService userService;

   @Test
   public void contextLoads() {

       userService.bugTicket();

  }

}

4、启动测试

1. 开启zookeeper

2. 打开dubbo-admin实现监控【可以不用做】

3. 开启服务者

4. 消费者消费测试,结果:

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

 监控中心 :

springboot集成dubbo和zookeeper,SpringBoot系列,dubbo,zookeeper,spring boot

这就是SpingBoot + dubbo + zookeeper实现分布式开发的应用,用到了服务拆分的思想

结束!文章来源地址https://www.toymoban.com/news/detail-713168.html

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

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

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

相关文章

  • springboot+dubbo+zookeeper 项目实战

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

    2024年02月03日
    浏览(39)
  • 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日
    浏览(53)
  • springboot+dubbo项目启动项目时报错 zookeeper not connected

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

    2024年02月11日
    浏览(45)
  • Spingboot整合Dubbo+zookeeper

    2023-12-26 19:38:05 最近学习分布式技术:Dubbo+zookeeper,准备写一个demo用springboot整合dubbo和zookeeper。但是看了网上一些教程都是几年前的,试着跟着写了几个demo没一个跑起来,基本是maven依赖方面的问题。 1、点击创建一个springboot项目 2、勾选web和lombok 3、创建 4、修改IDEA的Maven配置

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

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

    2024年02月04日
    浏览(50)
  • 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日
    浏览(44)
  • 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日
    浏览(38)
  • 【SpringBoot】| SpringBoot集成Dubbo

    目录 一:SpringBoot集成Dubbo 1. 创建公共项目 2. 创建提供者项目provider 3. 创建消费者consumer项目 4. 注册中心Zookeeper的安装 图书推荐:《Python 自动化办公应用大全》 阿里巴巴提供了 dubbo 集成 springBoot 开源项目, 可以到 GitHub 上 GitHub - apache/dubbo-spring-boot-project: Spring Boot Project f

    2024年02月08日
    浏览(47)
  • 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日
    浏览(31)
  • Dubbo+Zookeeper使用_dubbo zookeeper配置

    } ?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"? 4.0.0 server: port: 8081 spring: application: name: dubbo-consumer dubbo: registry: address: zookeeper://localhost:2181 # 连接到注册中心 protocol: name: dubbo # 指定的协议 port: 28081 # 指定的端口 scan: basePackages: com.hzy.controller # 接口列表和接口中的方法列表 server: port: 8082 spring:

    2024年04月15日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包