分布式应用开发 | SpringBoot+dubbo+zookeeper实现服务注册发现 | 远程服务调用
前言
通过新建两个独立服务——提供者、消费者,模拟两个独立分布的应用,通过使用dubbo+zookeeper来实现远程服务调用。
目录
项目搭建
- provider-server
- consumer-server
实现并测试
- provider-server注册
- consumer-server远程调用
项目搭建
为了方便,新建一个空的项目:

在空项目上new一个module,使用SpringBoot,作为服务提供者

删除不需要的文件:

在来 new一个module,使用SpringBoot,作为服务消费者

两个服务分别导入dobbo和zookeeper依赖
<!-- https://mvnrepository.com/artifact/org.apache.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>
坑:日志冲突
编写服务提供者-实际服务:
package com.hwl.service; import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component; /**
* @author:hwl
* @date:2021/10/8 13:13
* @Function:
* @Description:
*/
@Service //这是dubbo的,不是service的,作用是服务启动 自动注册到服务中心
@Component //这是Spring的,这里平时是用service但是现在为了区别dubbo用Component
public class TicketServiceImpl implements TicketService { @Override
public String getTicket(){
return "拿到票子啦!";
}
}
配置启动端口和dubbo信息
server.port=8001 #当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.hwl.service
启动zookper
启动dubbo-admin
启动提供者服务
注:需要注意启动顺序,而且涉及通讯会有一些延迟。
访问dubbo-admin查看我们的服务是否注册到服务中心:http://localhost:7001

可以看到我们的服务已经注册进来了。
消费者:
package com.hwl.service; import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service; /**
* @author:hwl
* @date:2021/10/8 13:22
* @Function:
* @Description:
*/
@Service //这里是放到spring容器不是dubbo
public class UserService{
//去拿提供者提供的票,需要去注册中心拿服务
@Reference //引用,pom坐标,可以定义路径相同的接口名
TicketService ticketService; public void buyTicket(){
String ticket = ticketService.getTicket();
System.out.println( ticket );
}
}
需要注意的是这里的 TicketService 路径需要和注册中心中是实际TicketService 一样,实际调用的是服务中心中注册的远程服务。
配置:
server.port=8002 #当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
消费者调用注册中心服务测试类:
package com.hwl; import com.hwl.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest
class ConsumerServerApplicationTests { @Autowired
UserService userService; @Test
void contextLoads() {
userService.buyTicket();
} }
运行测试:

消费者服务成功调用到了提供者注册在服务中心的服务了!
这就是SpingBoot + dubbo + zookeeper实现分布式开发的应用,其实就是一个服务拆分的思想。
分布式应用开发 | SpringBoot+dubbo+zookeeper实现服务注册发现 | 远程服务调用的更多相关文章
- Zookeeper实现服务注册/发现
what that? Zookeeper在分布式开发中使用频繁,但许多框架都对其进行了封装,初学者可能无法较好的理解其工作原理,该文章演示了使用Zookeeper实现服务注册,服务发现的简单demo, ...
- springboot+dubbo+zookeeper微服务实践demo
微服务化越来越火,实际上是应互联网时代而生的,微服务化带来的不仅是性能上的提升,更带来了研发组织的更加便利,协作更加轻松,团队效能更高. 当然不能为了技术而技术,我们需要切合实际的对业务进行划分,降低 ...
- springboot使用zookeeper(curator)实现注册发现与负载均衡
最简单的实现服务高可用的方法就是集群化,也就是分布式部署,但是分布式部署会带来一些问题.比如: 1.各个实例之间的协同(锁) 2.负载均衡 3.热删除 这里通过一个简单的实例来说明如何解决注册发现和负 ...
- spring cloud Eureka 服务注册发现与调用
记录一下用spring cloud Eureka搭建服务注册与发现框架的过程. 为了创建spring项目方便,使用了STS. 一.Eureka注册中心 1.新建项目-Spring Starter Pr ...
- SpringBoot + Dubbo + zookeeper 搭建简单分布式服务
SpringBoot + Dubbo + zookeeper 搭建简单分布式服务 详细操作及源码见: https://github.com/BillyYangOne/dubbo-springboot
- SpringBoot + Spring Cloud Eureka 服务注册与发现
什么是Spring Cloud Eureka Eureka是Netflix公司开发的开源服务注册发现组件,服务发现可以说是微服务开发的核心功能了,微服务部署后一定要有服务注册和发现的能力,Eureka ...
- 搭建SpringBoot+dubbo+zookeeper+maven框架(一)
这几天项目还没来,所以就自己试着参考网上的一些资料,搭建了一个SpringBoot+dubbo+zookeeper+maven框架,网上参考的很多资料照着他们一步一步搭建,最后很多都运行不通,很是郁闷 ...
- springboot+dubbo+zookeeper+mybatis
参考地址:https://www.cnblogs.com/gaopengfirst/p/9555240.html 首先创建一个maven项目: 再在该父项目中创建3个module,分别是:provid ...
- 服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比
服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比 注册中心简介 流程和原理 基础流程 核心功能 1.Eureka.Consul.Zookeeper三者异同点 ...
随机推荐
- PC微信多开
1.桌面上面新建一个 多开.txt . 2.将下面的内容拷贝进去 TASKKILL /F /IM wechat.exestart "" "E:\wechat\WeCha ...
- Data Leakage in Machine Learning 机器学习训练中的数据泄漏
refer to: https://www.kaggle.com/dansbecker/data-leakage There are two main types of leakage: Leaky ...
- 堆栈相关的经典题(c++)
1.定义队列 typedef struct node{ int data; struct node * next; }Node; typedef struct linkQueue { Node * f ...
- SQLServer数据库查询语法
SQLServer数据库查询语法 前言: SQLServer数据库介绍: SQLServer数据库是微软公司推出的一款关系型数据库系统,SQL Server是一个可扩展的.高性能的.为分布式客户机/服 ...
- .NET 5 支持 Azure Functions OpenAPI 扩展啦
今年5月,在 Build大会上,Azure FunctionsOpenAPI的功能支持(预览版)正式宣布. 当时,它最高支持 v3 运行时--.NET Core 3.1 版本. 最近,它发布了 .NE ...
- MyBatis学习总结(六)——Mybatis3.x与Spring4.x整合
一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-myba ...
- Linux制作Raid
1.启动服务器 2.在服务器出现提示的时候,根据提示进入Raid管理界面(Ctrl + R),Raid管理界面如下: 3.删除原有的Raid 4.新建Raid 第一步:进入新建Raid的界面 第二步: ...
- linux清空文件
https://www.cnblogs.com/mrwang1101/p/6166326.html
- JS005. 拷贝引用数据类型Array使其指向不同堆的解决方案
一个很常见的语法问题,但专注实现需求时经常会忘记去避免,导致最终问题的出现,再花时间排查.为此专门整理一篇解决方法的博客,也加强一下自己的记忆. TAG: JSON.parse() JSON.stri ...
- 常见shell脚本测试题 if/case语句
1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提 ...