热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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,使用新版本还有点点区别,在代码中我也给出一些警示了。


    
    
      org.apache.dubbo
      dubbo-spring-boot-starter
      2.7.3
    

    
    
    
      com.github.sgroschupf
      zkclient
      0.1
    


    
    
      org.apache.curator
      curator-framework
      2.12.0
    
    
      org.apache.curator
      curator-recipes
      2.12.0
    

    
      org.apache.zookeeper
      zookeeper
      3.4.14
      
      
        
          org.slf4j
          slf4j-log4j12
        
      
    

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集成内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 免费获取:全面更新的Linux集群视频教程及配套资源
    本资源包含最新的Linux集群视频教程、详细的教学资料、实用的学习课件、完整的源代码及多种软件开发工具。百度网盘链接:https://pan.baidu.com/s/1roYoSM0jHqa3PrCfaaaqUQ,提取码:41py。关注我们的公众号,获取更多更新的技术教程。 ... [详细]
  • Consul 单节点与集群环境构建指南
    本文详细介绍了如何安装和配置 Consul 以支持服务注册与发现、健康检查等功能,包括单节点和集群环境的搭建步骤。 ... [详细]
  • 深入解析Apache SkyWalking CVE-2020-9483 SQL注入漏洞
    本文详细探讨了Apache SkyWalking中的SQL注入漏洞(CVE-2020-9483),特别是其影响范围、漏洞原因及修复方法。Apache SkyWalking是一款强大的应用性能管理工具,广泛应用于微服务架构中。然而,该漏洞使得未经授权的攻击者能够通过特定的GraphQL接口执行恶意SQL查询,从而获取敏感信息。 ... [详细]
  • 本文整理了一系列Java面试问题,涵盖Java开发环境的分类、Java语言的核心特性、Linux环境下Java SE的安装步骤、常用的Java开发工具介绍,以及类与对象的基本概念等。 ... [详细]
  • 深入探讨ASP.NET中的OAuth、JWT与OpenID Connect
    本文作为前文关于OAuth2.0和使用.NET实现OAuth身份验证的补充,详细阐述了OAuth与JWT及OpenID Connect之间的关系和差异,旨在提供更全面的理解。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
  • 利用GitHub热门资源,成功斩获阿里、京东、腾讯三巨头Offer
    Spring框架作为Java生态系统中的重要组成部分,因其强大的功能和灵活的扩展性,被广泛应用于各种规模的企业级应用开发中。本文将通过一份在GitHub上获得极高评价的Spring全家桶文档,探讨如何掌握Spring框架及其相关技术,助力职业发展。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • 自SQL Server 2005以来,微软的这款数据库产品逐渐崭露头角,成为企业级应用中的佼佼者。本文将探讨SQL Server 2008的革新之处及其对企业级数据库市场的影响。 ... [详细]
  • Zookeeper面试常见问题解析
    本文详细介绍了Zookeeper中的ZAB协议、节点类型、ACL权限控制机制、角色分工、工作状态、Watch机制、常用客户端、分布式锁实现、默认通信框架以及消息广播和领导选举的流程。 ... [详细]
  • 解读 DevOps:开发与运维的融合之道
    近年来,随着信息技术的快速发展,DevOps作为一种新的IT管理理念逐渐受到重视。本文将探讨DevOps的核心概念及其对现代企业的重要意义。 ... [详细]
  • 解决Linux Ubuntu下Ping IP正常但无法Ping域名的问题
    本文介绍了在Linux Ubuntu系统中遇到的一种常见问题——能够Ping通IP地址,但无法Ping通域名,并提供了有效的解决方案。 ... [详细]
  • MHA 架构详解与实践
    MHA(Master High Availability)是一种高效的主从切换解决方案,确保了数据的一致性和系统的高可用性。本文将详细介绍MHA的功能、主从切换流程以及配置步骤,并探讨其优缺点。 ... [详细]
author-avatar
可爱鼠标1985
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有