关于dubbo-zookeeper:分布式电商项目九DubboZookeeper项目重构

SOA思维SOA思维介绍面向服务的架构(SOA)是一个组件模型,它将应用程序的不同性能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协定分割起来。接口是采纳中立的形式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的零碎中的服务能够以一种对立和通用的形式进行交互。 RPC介绍(调用模式的统称)RPC介绍RPC(Remote Procedure Call)近程过程调用,简略的了解是一个节点申请另一个节点提供的服务本地过程调用:如果须要将本地student对象的age+1,能够实现一个addAge()办法,将student对象传入,对年龄进行更新之后返回即可,本地办法调用的函数体通过函数指针来指定。近程过程调用:addAge办法在其余的服务器中,如果须要调用则必须通过近程的形式告诉其余服务器帮我实现业务调用. 总结: 利用第三方的服务器,帮我实现业务调用的过程.了解: 分布式环境中 业务调用简直都是RPC的. 微服务什么是微服务阐明: 为了升高代码的耦合性,将我的项目进行了拆分.依照功能模块拆分为若干个我的项目.该我的项目称之为服务.(分布式思维).如果采纳微服务的构造,要求服务器如果呈现了故障应该实现自动化的故障的迁徙(高可用HA)现有服务剖析阐明:因为nginx负载平衡/反向代理都须要人为的配置,并且呈现了问题不能及时的实现故障的迁徙,所以须要降级为微服务的架构的设计. 微服务架构设计实现步骤: 服务提供者启动时,.将本人的信息注册到注册核心中.注册核心承受到了用户的申请之后,更新服务列表信息.当消费者启动时,首先会链接注册核心,获取服务列表数据.注册核心将本人的服务列表信息同步给客户端(消费者)消费者接管到服务列表数据之后,将信息保留到本人的本地.不便下次调用当消费者接管到用户的申请时,依据本人服务列表的信息进行负载平衡的操作,抉择其中一个服务的提供者,依据IP:PORT 进行RPC调用.当服务提供者宕机时,注册核心会有心跳检测机制,如果查看宕机,则更新本地的服务列表数据,并且全网播送告诉所有的消费者更新服务列表.ZookeeperZookeeper介绍ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的性能包含:配置保护、域名服务、分布式同步、组服务等。ZooKeeper的指标就是封装好简单易出错的要害服务,将简略易用的接口和性能高效、性能稳固的零碎提供给用户。ZooKeeper蕴含一个简略的原语集,提供Java和C的接口。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3srcrecipes。其中散布锁和队列有Java和C两个版本,选举只有Java版本。 总结:Zookeeper负责服务的协调调度.当客户端发动申请时,返回正确的服务器地址. Zookeeper下载网址: http://zookeeper.apache.org/releases.html. ZK装置先装置JDK(jdk1.8)1.上传安装文件解压目录: tar -xvf zookeeper-3.4.8.tar.gz2.批改配置文件在zk根目录下创立文件夹data/log mkdir data log 3.跳入conf目录中批改配置文件复制配置文件并且批改名称 cp zoo_sample.cfg zoo.cfg 4.启动zk跳转到bin目录中 zk启动敞开命令如下. sh zkServer.sh start 或者 ./zkServer.sh startsh zkServer.sh stopsh zkServer.sh status Zookeeper集群装置1.筹备文件夹在zookeeper根目录中创立新的文件夹zkCluster.创立zk1/zk2/zk3文件夹.在每个文件夹里创立data/log文件夹. mkdir {zk1,zk2,zk3}/{data,log} 2.在每个文件夹里创立data/log文件夹.mkdir {zk1,zk2,zk3}/{data,log} 3.别离在zk1/zk2/zk3中的data文件夹中创立新的文件myid.其中的内容顺次为1/2/3,与zk节点号对应. 4.在config目录中将zoo_sample.cfg 复制为zoo1.cfg之后批改配置文件.将zoo_sample.cfg 复制为zoo1.cfg之后批改配置文件. 5.批改zoo1.cfg 配置实现后将zoo1.cfg复制2份.之后须要批改对应的文件夹目录.和不同的端口即可. 6.ZK集群测试通过上面的命令启动zk集群. sh zkServer.sh start zoo1.cfgsh zkServer.sh stop zoo1.cfgsh zkServer.sh status zoo1.cfg查看主从关系,从机状况阐明查看主从关系,主机状况阐明 对于zookeeper集群阐明Zookeeper集群中leader负责监控集群状态,follower次要负责客户端链接获取服务列表信息.同时参加投票. 为什么集群个别都是奇数个?公式: 存活的节点 > N/2 ...

November 29, 2020 · 5 min · jiezi

关于dubbo-zookeeper:Dubbo微服务

SOA思维概念soa思维即为面向服务开发;倒退步骤:面向对象思维-->面向接口开发-->面向切面开发-->面向服务开发 概括:SOA思维要求依照业务将服务进行拆分,之后依照同一的中立的接口进行交互. 结构图相比拟于上一篇文章的httpclient的近程调用,soa中将前端的service中httpclient局部以及后端的controller部门简化为一个公共中立的接口方便使用与调用. RPC概念RPC为近程过程调用--简略了解:一个节点申请另一个节点提供的服务1.本地过程调用:本地调用办法执行业务2.近程过程调用:在服务之间,由第三方实现本人的工作的过程. 微服务调用原理必要两点:1.依据业务拆分的思维 进行了分布式的设计2.当服务产生异样时能够主动的实现故障的迁徙(高可用)无需人为的干涉. 传统服务调用形式因为nginx做负载平衡时须要依赖配置文件.然而当服务器新增/缩小时.都须要手动的批改配置文件.不能自动化的实现.所以临时达不到微服务的规范. 微服务调用形式步骤:**1.当服务的提供者启动时,会将本人的服务信息(服务名称/IP/端口号)进行记录2.服务注册核心须要记录提供者的信息 保护服务列表3.当服务消费者启动时会链接注册核心.4.从注册核心中获取服务列表信息,不便下次调用5.当消费者调用服务时,会依据负载平衡的机制筛选其中的一个服务提供者进行拜访.6.当服务提供者宕机时,因为注册核心有心跳检测机制,会保护服务列表.当宕机的提供者标识为down7.当服务列表保护之后,会全网播送告诉所有服务器的消费者更新服务列表信息.** 对于集群阐明集群为何是奇数台准则: 搭建集群必须满足公式 现有的节点数量 > N/2为什么集群的最小单位是3台:假如:1台 1-1=0 > 1/2 false2台 2-1=1 > 2/2 false3台 3-1=2 > 3/2 true 3台是搭建集群的最小单位.4台 4-1=3 > 4/2 true 只有大概3台都能够搭建集群. 集群中最多容许宕机的台数为多少:3台最多容许宕机几台---最多宕机1台4台最多容许宕机几台---最多宕机1台 从实用性的角度思考问题 发现搭建奇数台和偶数台的容灾能力雷同.所以选用奇数台. zookeeper总结:Zookeeper负责服务的协调调度.当客户端发动申请时,返回正确的服务器地址. zookeeper即为微服务中咱们所要应用的注册核心,以下简称zk,装置运行/搭建集群过程不做赘述,请自行查阅. zk集群选举的原理原理阐明: zk集群的选举依据最大值优先的规定,进行选举. 如果集群一旦超过半数以上的票数批准,则入选主机,同时选举完结. 题目: 有1,2,3,4,5,6,7节点顺次启动.问题1: 谁当主机? 4当主机问题2: 哪几台永远不能入选主机? 1 2 3 Dubbo框架介绍官网简介Apache Dubbo |db| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大外围能力:面向接口的近程办法调用,智能容错和负载平衡,以及服务主动注册和发现。 个性 工作原理和上文中微服务调用过程基本一致 入门案例1.定义第三方的公共接口我的项目:消费者和提供者都会依赖此接口来进行传输,其中须要定义pojo类以及service接口 2.提供者阐明:1).编辑Dubbo的service接口的实现类:实现公共接口我的项目的service接口(前提我的项目要依赖)实现类注解要写Dubbo的@Service而不是spring的注解 2).编辑YML配置文件:端口号/数据源/MP/Dubbo配置(包门路/利用名称(一个服务一个名称)/注册核心/协定) 3.消费者阐明:1).编辑controller:注入service:利用dubbo的形式@Reference为接口创立代理对象,利用rpc调用;而不是@Autowired 2).编辑YML配置文件:端口号/Dubbo配置(包门路/利用名称(一个服务一个名称)/注册核心) 4.启动测试业务 Dubbo题目问题1: 如果将其中的一个服务的提供者敞开,问 用户拜访是否受影响---不受任何影响问题2: 如果将dubbo中的注册核心全副敞开,问用户拜访是否受到影响---不受影响,因为消费者将服务列表数据保留到本地.

September 16, 2020 · 1 min · jiezi

Spring-Boot集成Dubbo-并且使用使用zookeeper作为注册中心

Spring Boot集成Dubbo 并且使用使用zookeeper作为注册中心前言本文全程在Windos下操作,大致操作与Linux相差无异,具体细节请百度,有条件的可以谷歌! 需要了解的知识点 Dubbo 和 zookeeper 环境以及了解这两个是个什么东东Spring Boot 知识点,仅限于包结构 pom依赖 继承等Maven 聚合工程JDK 和 tomcat 环境配置等首先环境配置JDK 8 Maven 3.xSpring Boot 1.5.22tomcat 8.xMysql 5.5dubbo 2.5.4zookeeper 3.5.8 关于Dubbo 、zookeeper 以及微服务是什么东西,请百度,如不知道就不要往下看了。 首选需要了解和安装Dubbo 和 zookeeper 环境 可以查看 Windows下搭建dubbo和zookeeper环境 搭建Maven聚合项目先新建父级工程 输入项目名和groupid 和 ArtifactId 然后在父级包上右键新建Module 如下图,点击完成即可。 等等新建结束后点击父级pom可以看到子maven模块 项目结构 新建后的pom文件 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gamll</groupId> <artifactId>gamll-parent</artifactId> <version>1.0-SNAPSHOT</version> <description>父级maven</description> <modules> <module>gmall-api</module><!-- <module>gmall_user</module>--> <module>gmall-common-util</module> <module>service-util</module> <module>gmall-user-service-dir/gmall-user-service</module> <module>gmall-user-service-dir/gmall-user-web</module> </modules></project>引入Spring Boot 依赖后 和 部分依赖后,依赖维护 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gamll</groupId> <artifactId>gamll-parent</artifactId> <version>1.0-SNAPSHOT</version> <description>父级maven</description> <modules> <module>gmall-api</module><!-- <module>gmall_user</module>--> <module>gmall-common-util</module> <module>service-util</module> <module>gmall-user-service-dir/gmall-user-service</module> <module>gmall-user-service-dir/gmall-user-web</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.22.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <packaging>pom</packaging> <!-- 定义依赖版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <fastjson.version>1.2.46</fastjson.version> <dubbo-starter.version>1.0.10</dubbo-starter.version> <dubbo.version>2.6.0</dubbo.version> <zkclient.version>0.10</zkclient.version> <mybatis.version>1.3.1</mybatis.version> <nekohtml.version>1.9.20</nekohtml.version> <xml-apis.version>1.4.01</xml-apis.version> <batik-ext.version>1.9.1</batik-ext.version> <jsoup.version>1.11.2</jsoup.version> <httpclient.version>4.5.5</httpclient.version> <commons-lang3.version>3.7</commons-lang3.version> <mapper-starter.version>1.2.3</mapper-starter.version> <jedis.version>2.9.0</jedis.version> <jest.version>5.3.2</jest.version> <jna.version>4.5.1</jna.version> <beanUtils.version>1.9.3</beanUtils.version> </properties> <!--依赖维护--> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>${zkclient.version}</version> </dependency> <dependency> <groupId>com.gitee.reger</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>${dubbo-starter.version}</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>${nekohtml.version}</version> </dependency> <dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>${xml-apis.version}</version> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-ext</artifactId> <version>${batik-ext.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>${jsoup.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${httpclient.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>${mapper-starter.version}</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/io.searchbox/jest --> <dependency> <groupId>io.searchbox</groupId> <artifactId>jest</artifactId> <version>${jest.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>${jna.version}</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>${beanUtils.version}</version> </dependency> </dependencies> </dependencyManagement></project>gmall-api存放实体类,和定义service接口 ...

June 27, 2020 · 6 min · jiezi

springboot整合dubbozookeeper-实现生产者消费者模型

基于注解https://github.com/Nirvana010... 基于xml文件https://github.com/Nirvana010... 区别基于xml文件方式,在服务提供方,新增provider.xml,在里面配置服务提供方相应的信息;在启动类中新增@ImportResource("provider.xml");去掉具体服务实现类中@Service注解; 在服务消费方,新增consumer.xml的配置文件;在启动类中新增@ImportResource("consumer.xml");使用spring的@Autowired注解替代@Reference 。

July 2, 2019 · 1 min · jiezi

超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务

Github 地址:https://github.com/Snailclimb/springboot-integration-examples ,欢迎各位 Star。目录:使用 SpringBoot+Dubbo 搭建一个简单分布式服务实战之前,先来看几个重要的概念什么是分布式?什么是 Duboo?Dubbo 架构什么是 RPC?为什么要用 Dubbo?开始实战 1 :zookeeper 环境安装搭建1. 下载2. 解压3. 进入zookeeper目录,创建data文件夹。4. 进入/zookeeper/conf目录下,复制zoo_sample.cfg,命名为zoo.cfg5. 修改配置文件6. 启动测试开始实战 2 :实现服务接口 dubbo-interface1. dubbo-interface 项目创建2. 创建接口类3. 将项目打成 jar 包供其他项目使用开始实战 3 :实现服务提供者 dubbo-provider1. dubbo-provider 项目创建2. pom 文件引入相关依赖3. 在 application.properties 配置文件中配置 dubbo 相关信息4. 实现接口5. 服务提供者启动类编写开始实战 4 :实现服务消费者 dubbo-consumer4. 编写一个简单 Controller 调用远程服务5. 服务消费者启动类编写6. 测试效果使用 SpringBoot+Dubbo 搭建一个简单分布式服务实战之前,先来看几个重要的概念开始实战之前,我们先来简单的了解一下这样几个概念:Dubbo、RPC、分布式、由于本文的目的是带大家使用SpringBoot+Dubbo 搭建一个简单的分布式服务,所以这些概念我只会简单给大家普及一下,不会做深入探究。什么是分布式?分布式或者说 SOA 分布式重要的就是面向服务,说简单的分布式就是我们把整个系统拆分成不同的服务然后将这些服务放在不同的服务器上减轻单体服务的压力提高并发量和性能。比如电商系统可以简单地拆分成订单系统、商品系统、登录系统等等。我们可以使用 Dubbo作为分布式系统的桥梁,那么什么是 Dubbo 呢?什么是 Duboo?Apache Dubbo (incubating) |db| 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo 目前已经有接近 23k 的 Star ,Dubbo的Github 地址:https://github.com/apache/inc…。另外,在开源中国举行的2018年度最受欢迎中国开源软件这个活动的评选中,Dubbo 更是凭借其超高人气仅次于 vue.js 和 ECharts 获得第三名的好成绩。Dubbo 是由阿里开源,后来加入了 Apache 。正式由于 Dubbo 的出现,才使得越来越多的公司开始使用以及接受分布式架构。下面我们简单地来看一下 Dubbo 的架构,加深对 Dubbo 的理解。Dubbo 架构下面我们再来看看 Dubbo 的架构,我们后面会使用 zookeeper 作为注册中心,这也是 Dubbo 官方推荐的一种方式。上述节点简单说明:Provider 暴露服务的服务提供方Consumer 调用远程服务的服务消费方Registry 服务注册与发现的注册中心Monitor 统计服务的调用次数和调用时间的监控中心Container 服务运行容器调用关系说明:服务容器负责启动,加载,运行服务提供者。服务提供者在启动时,向注册中心注册自己提供的服务。服务消费者在启动时,向注册中心订阅自己所需的服务。注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。我们在讲 Dubbo 的时候提到了 Dubbo 实际上是一款 RPC 框架,那么RPC 究竟是什么呢?相信看了下面我对 RPC 的介绍你就明白了!什么是 RPC?RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务A,B部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解决这个问题。为什么要用 Dubbo?如果你要开发分布式程序,你也可以直接基于 HTTP 接口进行通信,但是为什么要用 Dubbo呢?我觉得主要可以从 Dubbo 提供的下面四点特性来说为什么要用 Dubbo:负载均衡——同一个服务部署在不同的机器时该调用那一台机器上的服务服务调用链路生成——服务之间互相是如何调用的服务访问压力以及时长统计——当前系统的压力主要在哪里,如何来扩容和优化服务降级——某个服务挂掉之后调用备用服务开始实战 1 :zookeeper 环境安装搭建我使用的是 CentOS 7.4 阿里云服务器,注意:如果你也同样阿里云服务器必须配置一个安全组,不然你的应用程序会无法访问你的 zookeeper 服务器,这一点我在后面也提到了。1. 下载通过 http://mirror.bit.edu.cn/apache/zookeeper/ 这个链接下载,然后上传到Linux上。(可以说那个 Xhell 附带的文件传输功能)或者直接在Linux中使用 wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz 命令下载(版本号 3.4.12 是我写这篇文章的时候最新的稳定版本,各位可以根据实际情况修改)2. 解压tar -zxvf zookeeper-3.4.12-alpha.tar.gz解压完毕之后修改一下解压之后所得的文件夹名mv zookeeper-3.4.12 zookeeper删除 zookeeper 安装包rm -rf zookeeper-3.4.12.tar.gz3. 进入zookeeper目录,创建data文件夹。mkdir data进入 data 文件夹 然后执行pwd命令,复制所得的当前目录位置(就是我用红色圈出来的文字)4. 进入/zookeeper/conf目录下,复制zoo_sample.cfg,命名为zoo.cfgcp zoo_sample.cfg zoo.cfg5. 修改配置文件使用 vim zoo.cfg 命令修改配置文件vim 文件——>进入文件—–>命令模式——>按i进入编辑模式—–>编辑文件 ——->按Esc进入底行模式—–>输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存。)修改配置文件中的 data 属性:dataDir=/usr/local/zookeeper/data6. 启动测试进入 /zookeeper/bin 目录然后执行下面的命令./zkServer.sh start执行 ./zkServer.sh status 查看当前 zookeeper 状态。或者运行 netstat -lntup 命令查看网络状态,可以看到 zookeeper 的端口号 2181 已经被占用注意没有关闭防火墙可能出现的问题!!!如果你使用的阿里云服务器注意配置相关安全组:进入本实例安全组页面选择配置规则选择添加安全组规则,然后按照下图配置在开始实战之前提个建议:尽量新建一个文件夹,然后后面将接口项目、服务提供者以及服务消费者都放在这个文件夹。开始实战 2 :实现服务接口 dubbo-interface主要分为下面几步:创建 Maven 项目;创建接口类将项目打成 jar 包供其他项目使用项目结构:dubbo-interface 后面被打成 jar 包,它的作用只是提供接口。1. dubbo-interface 项目创建File->New->Module… ,然后选择 Maven类型的项目,其他的按照提示一步一步走就好。2. 创建接口类package top.snailclimb.service;public interface HelloService { public String sayHello(String name);}3. 将项目打成 jar 包供其他项目使用点击右边的 Maven Projects 然后选择 install ,这样 jar 宝就打好了。开始实战 3 :实现服务提供者 dubbo-provider主要分为下面几步:创建 springboot 项目;加入 dubbo 、zookeeper以及接口的相关依赖 jar 包;在 application.properties 配置文件中配置 dubbo 相关信息;实现接口类;服务提供者启动类编写项目结构:1. dubbo-provider 项目创建创建一个 SpringBoot 项目,注意勾选上 web 模块。不会创建的话,可以查看下面这篇文章:,可以说很详细了。https://blog.csdn.net/qq_34337272/article/details/795636062. pom 文件引入相关依赖需要引入 dubbo 、zookeeper以及接口的相关依赖 jar 包。注意将本项目和 dubbo-interface 项目的 dependency 依赖的 groupId 和 artifactId 改成自己的。dubbo 整合spring boot 的 jar 包在这里找dubbo-spring-boot-starter。zookeeper 的 jar包在 Maven 仓库 搜索 zkclient 即可找到。 <dependency> <groupId>top.snailclimb</groupId> <artifactId>dubbo-interface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!–引入dubbo的依赖–> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!– 引入zookeeper的依赖 –> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency>3. 在 application.properties 配置文件中配置 dubbo 相关信息配置很简单,这主要得益于 springboot 整合 dubbo 专属的@EnableDubboConfiguration 注解提供的 Dubbo 自动配置。# 配置端口server.port=8333spring.dubbo.application.name=dubbo-providerspring.dubbo.application.registry=zookeeper://ip地址:21814. 实现接口注意: @Service 注解使用的时 Dubbo 提供的而不是 Spring 提供的。另外,加了Dubbo 提供的 @Service 注解之后还需要加入package top.snailclimb.service.impl;import com.alibaba.dubbo.config.annotation.Service;import org.springframework.stereotype.Component;import top.snailclimb.service.HelloService;@Component@Servicepublic class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return “Hello " + name; }}5. 服务提供者启动类编写注意:不要忘记加上 @EnableDubboConfiguration 注解开启Dubbo 的自动配置。package top.snailclimb;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication// 开启dubbo的自动配置@EnableDubboConfigurationpublic class DubboProviderApplication { public static void main(String[] args) { SpringApplication.run(DubboProviderApplication.class, args); }}开始实战 4 :实现服务消费者 dubbo-consumer主要分为下面几步:创建 springboot 项目;加入 dubbo 、zookeeper以及接口的相关依赖 jar 包;在 application.properties 配置文件中配置 dubbo 相关信息;编写测试类;服务消费者启动类编写测试效果项目结构:第1,2,3 步和服务提供者的一样,这里直接从第 4 步开始。4. 编写一个简单 Controller 调用远程服务package top.snailclimb.dubboconsumer;import com.alibaba.dubbo.config.annotation.Reference;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import top.snailclimb.service.HelloService;@RestControllerpublic class HelloController { @Reference private HelloService helloService; @RequestMapping("/hello”) public String hello() { String hello = helloService.sayHello(“world”); System.out.println(helloService.sayHello(“SnailClimb”)); return hello; }}5. 服务消费者启动类编写package top.snailclimb.dubboconsumer;import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@EnableDubboConfigurationpublic class DubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(DubboConsumerApplication.class, args); }}6. 测试效果浏览器访问 http://localhost:8330/hello 页面返回 Hello world,控制台输出 Hello SnailClimb,和预期一直,使用SpringBoot+Dubbo 搭建第一个简单的分布式服务实验成功! ...

November 28, 2018 · 2 min · jiezi