当前位置: 首页 > 编程笔记 >

SpringBoot系列教程之dubbo和Zookeeper集成方法

仉成益
2023-03-14
本文向大家介绍SpringBoot系列教程之dubbo和Zookeeper集成方法,包括了SpringBoot系列教程之dubbo和Zookeeper集成方法的使用技巧和注意事项,需要的朋友参考一下

今日学习新的内容:dubbo

  dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

zookeeper

  zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

SpringBoot整合dubbo和Zookeeper

1、了解Dubbo基本概念


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

他们的关系如下:
1、服务容器启动后,运行加载服务提供者provider;
2、服务提供者成功启动,往注册中心提供自己能提供的服务;
3、服务消费者consumer成功启动,往注册中心订阅自己要消费的服务;
4、注册中心Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2、在docker中安装zookeeper

安装:

(自动获取到最新的zookeeper版本)
docker pull zookeeper 

启动:

docker run --name zk01 -p 2181:2181 --restart always -d 6ad6cb039dfa
6ad6cb039dfa(镜像id)

阿里云安全组规则和Linux系统防火墙都记得开放2181端口。


3、新建工程(1)新建工程,工程里新建两个模块,provider模块

(2)consumer模块

4、给两个模块导入相同的pom.xml文件

  zkclient使用起来还是有点坑,注意清除一些包中依赖,也是看狂神视频学到的,这里在使用2.7.7版本时候用了新的注解出了点问题,还是改回来使用2.7.3,使用新版本还有点点区别,在代码中我也给出一些警示了。

<dependencies>
    <!--    dubbo 7.3倒是可以,7.7的就出错连接不上了-->
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>2.7.3</version>
    </dependency>

    <!--    zookeeper client zkclient-->
    <!-- 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>

5、添加service层售票接口、接口实现类  (1)ITicketService

public interface ITicketService {
  String saleTicket(String name);
}

  (2)TicketServiceImpl

注意使用的包名称一定要一致,不是spring带的Service

package top.weidaboy.provider.service.Impl;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import top.weidaboy.provider.service.ITicketService;
//zookeeper:服务注册与发现
@Service      //使用后被注入,项目已启动就自动注册到注册中心
@Component  //放到spring容器中去
//新版:import org.apache.dubbo.config.annotation.DubboService;
//@DubboService //将服务发布出去
public class TicketServiceImpl implements ITicketService {

  @Override
  public String saleTicket(String name) {
    return "确认买票: "+name;
  }
}

6、application.proterties文件配置dubbo详细信息

server.port=8081
#当前应用起名
dubbo.application.name=provider-server
#找到zookeeper注册中心地址
dubbo.registry.address=zookeeper://你的IP:2181
#扫描提供指定包下的服务
dubbo.scan.base-packages=top.weidaboy.provider.service

7、启动服务提供者代码

  启动成功后,该程序会往对应的注册中心地址注册新的服务,供给需要消费的消费者使用

8、编写服务消费者代码

  既然有了服务提供者,那么就在consumer模块中创建消费者来使用服务,分以下三步:

(1)创建消费者服务,以及实现接口

  UserService:

public interface IUserService {
  //买票
  String buyTicket(String name);
}

   UserServiceImpl:

@Service//注入到容器中, 这个import org.springframework.stereotype.Service;
public class UserServiceImpl implements IUserService {

  @Reference
   //远程引用指定的服务,
  //该注解会按照全类名来进行匹配,看是哪个给注册中心注册了这个全类名
  ITicketService ticketService; //相同的接口名

  @Override
  public String buyTicket(String name) {
    return ticketService.saleTicket(name);
  }
}

(2)在consumer模块中添加服务提供者的接口代码

  要求:在consumer模块提供方的代码路径必须与provider模块的路径一样,只需导入接口类
ITicketService:

public interface ITicketService {
  String saleTicket(String name);
}

 代码结构如图:丑了点嘿嘿,凑合看吧

(3)修改application.proterties文件

  注意:这是在consumer模块下的文件,因为消费者只是需要消费服务,无须注册,就可以不用扫描对应的服务包名了

server.port=8082 #需要不同端口
#给当前应用起名:
dubbo.application.name=consumer-server
#注册中心
dubbo.registry.address=zookeeper://你的IP:2181

9、编写测试类

@SpringBootTest
class WeidaboyApplicationTests {
  @Autowired
  IUserService userService;
  @Test
  void contextLoads() {
    System.out.println(userService.buyTicket("唐人街探案三"));
  }
}

10、测试调用不同端口的服务

  运行测试类,要求我们刚刚启动的服务提供者的程序不要关闭,并且两个端口不能相互占用,注册中心地址一样。

测试成功!

小结

  本次学习内容实现:SpingBoot整合了dubbo和zookeeper实现分布式开发的应用,将提供服务和消费服务进行拆分,让不同系统去管理,整体是为了更方便,更有目的的开发项目,长路漫漫,继续前进吧!

到此这篇关于SpringBoot系列教程之dubbo和Zookeeper集成方法的文章就介绍到这了,更多相关SpringBoot dubbo和Zookeeper集成内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍Spring Boot系列教程之7步集成RabbitMQ的方法,包括了Spring Boot系列教程之7步集成RabbitMQ的方法的使用技巧和注意事项,需要的朋友参考一下 前言 RabbitMQ是一种我们经常使用的消息中间件,RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现

  • 本文向大家介绍Springboot整合Dubbo教程之项目创建和环境搭建,包括了Springboot整合Dubbo教程之项目创建和环境搭建的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Springboot整合Dubbo教程之项目创建和环境搭建,分享给大家,具体如下: 1. 使用IDEA新建一个Maven项目 新建项目 选择Maven后,点击next下一步 选择项目类型 配置项目的Maven坐

  • 本文向大家介绍详解SpringBoot+Dubbo集成ELK实战,包括了详解SpringBoot+Dubbo集成ELK实战的使用技巧和注意事项,需要的朋友参考一下 前言 一直以来,日志始终伴随着我们的开发和运维过程。当系统出现了Bug,往往就是通过Xshell连接到服务器,定位到日志文件,一点点排查问题来源。 随着互联网的快速发展,我们的系统越来越庞大。依赖肉眼分析日志文件来排查问题的方式渐渐凸显

  • 本页介绍了如何在 MOSN 中集成 Dubbo 服务。 Dubbo 介绍 Dubbo 最初是 Java 开发的一套 RPC 框架,随着社区的发展。当前 dubbo 也渐渐成为一套跨语言的解决方案。除了 Java 以外,还有相应的 Go 实现。有规律的版本发布节奏,社区较为活跃。 Dubbo 服务 mesh 化 接入 service mesh 的应用,其服务发现应该由相应的 mesh 模块接管。一般

  • 本文向大家介绍springboot2.2.2集成dubbo的实现方法,包括了springboot2.2.2集成dubbo的实现方法的使用技巧和注意事项,需要的朋友参考一下 最近在学习dubbo,想着作一些笔记,从来没有在csdn上面写过博客,今天献出第一次,哈哈,直接上代码 一、创建父工程 二、创建提供者与消费者共用的api 该模块没有什么好说的,提供者和消费者都需要使用的接口api,提供者和消费

  • ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。 ZooKeeper 的架构通过冗余服务实现高可用性。 Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸