我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于dubbo的分布式架构怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于dubbo的分布式架构怎么实现

本篇内容介绍了“基于dubbo的分布式架构怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

前言

现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的 SSM 项目来让第一次接触的同学能快速上手。

浅谈分布式架构

分布式架构单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。

我们拿一个电商系统来说:

单系统

基于dubbo的分布式架构怎么实现
对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。

这时候所有的业务逻辑都是在一个项目中就可以满足。

垂直拆分-多应用

基于dubbo的分布式架构怎么实现
当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用Nginx进行反向代理和简单的负载均衡

SOA服务化

当整个系统以及发展的足够大的时候,比如一个电商系统中存在有:

  • 用户系统

  • 订单系统

  • 支付系统

  • 物流系统

等系统。
如果每次修改了其中一个系统就要重新发布上线的话那么耦合就太严重了。

所以需要将整个项目拆分成若干个独立的应用,可以进行独立的开发上线实现快速迭代。

基于dubbo的分布式架构怎么实现

如上图所示每个应用之间相互独立,每个应用可以消费其他应用暴露出来的服务,同时也对外提供服务。

从架构的层面简单的理解了,接下来看看如何编码实现。

基于dubbo的实现

dubbo应该算是国内使用最多的分布式服务框架,基于此来实现对新入门的同学应该很有帮助。

其中有涉及到安装dubbo服务的注册中心zookeeper等相关知识点可以自行查看官方文档,这里就不单独讲了。

对外提供服务

首先第一步需要在SSM-API模块中定义一个接口,这里就搞了一个用户查询的接口

 public interface UserInfoApi {  public UserInfoRsp getUserInfo(int userId) throws Exception;}

接着在SSM-SERVICE模块中进行实现:

import com.alibaba.dubbo.config.annotation.Service;  @Service public class UserInfoApiImpl implements UserInfoApi { private static Logger logger = LoggerFactory.getLogger(UserInfoApiImpl.class); @Autowired private T_userService t_userService ;  @Override public UserInfoRsp getUserInfo(int userId) throws Exception {        logger.info("用户查询Id="+userId); //返回对象 UserInfoRsp userInfoRsp = new UserInfoRsp() ;        T_user t_user = t_userService.selectByPrimaryKey(userId) ; //构建 buildUserInfoRsp(userInfoRsp,t_user) ; return userInfoRsp;    }  private void buildUserInfoRsp(UserInfoRsp userInfoRsp, T_user t_user) { if (t_user == null){            t_user = new T_user() ;        }        CommonUtil.setLogValueModelToModel(t_user,userInfoRsp);    }}

这些都是通用的代码,但值得注意的一点是这里使用的dubbo框架所提供的@service注解。作用是声明需要暴露的服务接口。

再之后就是几个dubbo相关的配置文件了。

spring-dubbo-config.xml

 <dubbo:application name="ssm-service" owner="crossoverJie" organization="ssm-crossoverJie" logger="slf4j"/> <dubbo:registry id="dubbo-registry" address="zookeeper://192.168.0.188:2181" file="/tmp/dubbo.cachr" /> <dubbo:monitor protocol="registry" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:provider timeout="15000" retries="0" delay="-1" /> <dubbo:consumer check="false" timeout="15000" />

其实就是配置我们服务注册的zk地址,以及服务名称、超时时间等配置。

spring-dubbo-provider.xml

<dubbo:annotation package="com.crossoverJie.api.impl" />

这个配置扫描注解包的位置,一般配置到接口实现包即可。

spring-dubbo-consumer.xml

这个是消费者配置项,表明我们需要依赖的其他应用。
这里我们在SSM-BOOT项目中进行配置:

<dubbo:reference id="userInfoApi" interface="com.crossoverJie.api.UserInfoApi" />

直接就是配置的刚才我们提供的那个用户查询的接口,这样当我们自己的内部项目需要使用到这个服务只需要依赖SSM-BOOT即可,不需要单独的再去配置consumer。这个我有在上一篇SSM(十) 项目重构-互联网项目的Maven结构中也有提到。

安装管理控制台

还有一个需要做的就是安装管理控制台,这里可以看到我们有多少服务、调用情况是怎么样等作用。

这里我们可以将dubbo的官方源码下载下来,对其中的dubbo-admin模块进行打包,将生成的WAR包放到Tomcat中运行起来即可。

但是需要注意一点的是:
需要将其中的dubbo.properties的zk地址修改为自己的即可。

dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.admin.root.password=rootdubbo.admin.guest.password=guest

到时候登陆的话使用root,密码也是root。
使用guest,密码也是guest。

登陆界面如下图:
基于dubbo的分布式架构怎么实现

其中我们可以看到有两个服务以及注册上去了,但是没有消费者。

消费服务

为了能够更直观的体验到消费服务,我新建了一个项目:
https://github.com/crossoverJie/SSM-CONSUMER。

其中在SSM-CONSUMER-API中我也定义了一个接口:

 public interface SalaryInfoApi {  public SalaryInfoRsp getSalaryInfo(int userId) throws Exception;}

因为作为消费者的同时我们也对外提供了一个获取薪资的一个服务。

在SSM-CONSUMER-SERVICE模块中进行了实现:

 @Service public class SalaryInfoApiImpl implements SalaryInfoApi { private static Logger logger = LoggerFactory.getLogger(SalaryInfoApiImpl.class); @Autowired UserInfoApi userInfoApi ;  @Override public SalaryInfoRsp getSalaryInfo(int userId) throws Exception {        logger.info("薪资查询Id="+userId); //返回对象 SalaryInfoRsp salaryInfoRsp = new SalaryInfoRsp() ; //调用远程服务 UserInfoRsp userInfo = userInfoApi.getUserInfo(userId);                salaryInfoRsp.setUsername(userInfo.getUserName()); return salaryInfoRsp;    }}

其中就可以直接使用userInfoApi调用之前的个人信息服务。

再调用之前需要注意的有点是,我们只需要依赖SSM-BOOT这个模块即可进行调用,因为SSM-BOOT模块已经为我们配置了消费者之类的操作了:

 <dependency> <groupId>com.crossoverJie</groupId> <artifactId>SSM-BOOT</artifactId> </dependency>

还有一点是在配置SSM-BOOT中的spring-dubbo-cosumer.xml配置文件的时候,路径要和我们初始化spring配置文件时的路径一致:
基于dubbo的分布式架构怎么实现

 <!-- Spring和mybatis的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath*:/spring/*.xml" }) public class SalaryInfoApiImplTest { @Autowired private SalaryInfoApi salaryInfoApi ; @Test public void getSalaryInfo() throws Exception {        SalaryInfoRsp salaryInfo = salaryInfoApi.getSalaryInfo(1);        System.out.println(JSON.toJSONString(salaryInfo));    }}

基于dubbo的分布式架构怎么实现
消费者

基于dubbo的分布式架构怎么实现
提供者
可以看到确实是调用成功了的。

接下来将消费者项目也同时启动在来观察管理控制台有什么不一样:
基于dubbo的分布式架构怎么实现
会看到多了一个消费者所提供的服务com.crossoverjie.consumer.api.SalaryInfoApi,同时
com.crossoverJie.api.UserInfoApi服务已经正常,说明已经有消费者了。

基于dubbo的分布式架构怎么实现
点进去便可查看具体的消费者。

“基于dubbo的分布式架构怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于dubbo的分布式架构怎么实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于dubbo的分布式架构怎么实现

本篇内容介绍了“基于dubbo的分布式架构怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言现在越来越多的互联网公司还是将自己公司的
2023-06-05

基于dubbo分组group怎么实现

本文小编为大家详细介绍“基于dubbo分组group怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于dubbo分组group怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。服务分组1.当一个接口
2023-07-05

Dubbo分布式框架怎么使用

这篇文章主要介绍“Dubbo分布式框架怎么使用”,在日常操作中,相信很多人在Dubbo分布式框架怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Dubbo分布式框架怎么使用”的疑惑有所帮助!接下来,请跟
2023-06-19

基于Zookeeper怎么实现分布式锁

这篇文章主要介绍“基于Zookeeper怎么实现分布式锁”,在日常操作中,相信很多人在基于Zookeeper怎么实现分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Zookeeper怎么实现分布式锁
2023-06-22

基于MFS高可用的分布式存储架构

MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源;分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内,用户要访问这些文件夹的时候,只要打开一个文件夹
2023-06-03

基于hadoop的分布式爬虫怎么实现

要实现基于Hadoop的分布式爬虫,可以按照以下步骤进行:设计架构:首先需要设计分布式爬虫的架构,确定集群中各个节点的角色和任务分配。通常可以将爬虫任务分为链接提取、页面下载、页面解析和数据存储等步骤,并分配给不同的节点执行。数据存储:选择
基于hadoop的分布式爬虫怎么实现
2024-03-06

基于Redis实现分布式锁

我们知道分布式锁的特性是排他、避免死锁、高可用。分布式锁的实现可以通过数据库的乐观锁(通过版本号)或者悲观锁(通过for update)、Redis的setnx()命令、Zookeeper(在某个持久节点添加临时有序节点,判断当前节点是否是序列中最小的节点,如
基于Redis实现分布式锁
2017-09-11

基于Redis缓存怎么实现分布式锁

本篇内容介绍了“基于Redis缓存怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是分布式锁首先我们先来简单了解一下什么是
2023-06-19

Laravel基于reset怎么实现分布式事务

这篇文章主要讲解了“Laravel基于reset怎么实现分布式事务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel基于reset怎么实现分布式事务”吧!
2023-06-25

搭建JEESZ分布式架构5--Dubbo管控台的安装

Dubbo管控台的安装1. Dubbo管理控制台的主要作用:对Dubbo服务管控注意:Dubbo 管控台可以对注册到 zookeeper 注册中心的服务或服务消费者进行管理,Dubbo管控台的运行对 Dubbo 服务没有影响,所以管
2023-06-03

怎么用RMI实现基于Java的分布式计算

这篇文章将为大家详细讲解有关怎么用RMI实现基于Java的分布式计算,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java 2 Enterprise Edition(J2EE)远程方法调用(Remote
2023-06-03

Java基于Redis实现分布式锁

分布式锁可以基于很多种方式实现,比如zookeeper、redis...。不管哪种方式,他的基本原理是不变的:用一个状态值表示锁,对锁的占用和释放通过状态值来标识。一、为什么Redis可以方便地实现分布式锁1、Redis为单进程单线程模式,采用队列模式将并发访
Java基于Redis实现分布式锁
2015-09-14

基于Redission的分布式锁实战

目录一、为什么需要分布式锁二、Redission的实战使用2.1 Redission执行流程2.2 Watch Dog 机制2.3 对比setnx三、代码案php例一、为什么需要分布式锁在系统中,当存在多个进程和线程可以改变某个共享数据时
2022-08-14

基于TCC如何实现一个通用的分布式事务框架

这篇文章给大家介绍基于TCC如何实现一个通用的分布式事务框架,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一个TCC事务框架需要解决的当然是分布式事务的管理。TCC事务模型虽然说起来简单,然而要基于TCC实现一个通用的
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录