【SpringBoot】12.SpringBoot整合Dubbo+Zookeeper
1. 准 备
1.1 Dubbo 简介
Apache Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用、智能容错和
负载均衡、以及服务自动注册和发现。
更多详细的介绍,可以去 Dubbo 的官网了解。
1.2 安 装
Windows下安装zookeeper
这里用到 zookeeper 作为注册中心,所以首先,先在 Window 下安装 zookeeper。
直接下载压缩包,然后解压,接着在 conf 目录下,创建一个配置文件 zoo.cfg,内容如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
找到 bin 目录下的 zkServer.cmd ,双击运行,启动 zookeeper 注册中心
测试一下连接情况,是正常的。
到这里注册中心 zookeeper 安装完成。
Windows下安装Dubbo
Dubbo 本身是一个 jar 包,不需要安装,只需在用到的时候,引入项目中即可。
2. 整 合
由于 SpringBoot 整合 Dubbo 的测试,需要一个服务提供者和一个服务消费者,因此这里需要新建两个项目,一个 springboot-provider 作为服务提供者,另外一个是 springboot-consumer 作为服务消费者。
2.1 服务提供者springboot-provider
开发环境:
- IDEA
- Dubbo 3.1.0
- SpringBoot 2.7.3
- JDK 1.8
2.1.1 新建项目
利用 IDEA 新建一个 springboot-provider 项目,这个项目的 pom.xml 文件信息如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><relativePath/> </parent><groupId>com.yuhuofei</groupId><artifactId>springboot-provider</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-provider</name><description>provider project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--dubbo依赖--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.0</version></dependency><!--ZooKeeper客户端框架--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-x-discovery</artifactId><version>5.3.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
我们实际需要引入的依赖就是下面的两个而已
<!--dubbo依赖--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.0</version></dependency><!--ZooKeeper客户端框架--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-x-discovery</artifactId><version>5.3.0</version></dependency>
2.1.2 更改配置
修改 application.properties 的内容,如下所示:
server.port=8082
#dubbo配置
dubbo.application.name=springboot-provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=21882
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.timeout=60000
dubbo.scan.base-packages=com.yuhuofei.service
2.1.3 编写对外提供服务的接口
编写一个ProviderUserInfo 接口,内容如下
package com.yuhuofei.service;/*** @Description* @InterfaceName ProviderUserInfo* @Author yuhuofei* @Date 2022/8/28 12:11* @Version 1.0*/
public interface ProviderUserInfo {String getName();}
编写上面这个接口的实现类,并加上 @DubboService 注解,表示这是一个 Dubbo 接口
package com.yuhuofei.service.impl;import com.yuhuofei.service.ProviderUserInfo;
import org.apache.dubbo.config.annotation.DubboService;/*** @Description 服务提供者* @ClassName ProviderUserInfoImpl* @Author yuhuofei* @Date 2022/8/28 12:11* @Version 1.0*/
@DubboService
public class ProviderUserInfoImpl implements ProviderUserInfo {@Overridepublic String getName() {System.out.println("======dubbo接口被调用了======");return "王小贱";}
}
到这里,服务提供者,就算完成了。
2.2 服务消费者springboot-consumer
开发环境:
- IDEA
- Dubbo 3.1.0
- SpringBoot 2.7.3
- JDK 1.8
2.2.1 新建项目
利用 IDEA 新建一个 springboot-consumer 项目,这个项目的 pom.xml 文件信息如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.yuhuofei</groupId><artifactId>springboot-consumer</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-consumer</name><description>Consumer project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--dubbo依赖--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.0</version></dependency><!--ZooKeeper客户端框架--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-x-discovery</artifactId><version>5.3.0</version></dependency><dependency><groupId>com.yuhuofei</groupId><artifactId>springboot-provider</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
用到的依赖信息,基本和服务提供者的是一致的。
2.2.2 更改配置
服务消费者的配置信息如下,这里要注意的是,端口号不能和服务提供者的相同,那会导致端口冲突。
server.port=8081
#dubbo配置
dubbo.application.name=springboot-consumer
dubbo.protocol.name=dubbo
dubbo.protocol.port=21881
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.timeout=60000
dubbo.scan.base-packages=com.yuhuofei.service
2.2.3 编写接口
编写接口,调用服务提供者提供的接口,实现业务逻辑
controller 层的接口 UserController,内容如下
package com.yuhuofei.controller;import com.yuhuofei.service.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Description* @ClassName UserController* @Author yuhuofei* @Date 2022/8/28 12:14* @Version 1.0*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserInfo userInfo;@GetMapping("/user-name")public String userName(){return userInfo.userName();}}
service 层的接口 UserInfo,内容如下
package com.yuhuofei.service;/*** @Description* @InterfaceName UserInfo* @Author yuhuofei* @Date 2022/8/28 12:20* @Version 1.0*/
public interface UserInfo {String userName();
}
接口的实现类 UserInfoImpl ,因为要调用服务提供者提供的接口,因此需要用到注解 @DubboReference ,这是不能漏掉的。
package com.yuhuofei.service.impl;import com.yuhuofei.service.ProviderUserInfo;
import com.yuhuofei.service.UserInfo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;/*** @Description* @ClassName UserInfoImpl* @Author yuhuofei* @Date 2022/8/28 12:21* @Version 1.0*/
@Service
public class UserInfoImpl implements UserInfo {@DubboReferenceprivate ProviderUserInfo providerUserInfo;@Overridepublic String userName() {return providerUserInfo.getName();}
}
至此,服务消费者也算是完成了。
3. 测 试
第一步,双击 zkServer.cmd ,启动 zookeeper 服务器
如下,这样就相当于把注册中心,给启动起来了。
第二步,启动服务提供者
利用 IDEA 启动服务提供者 springboot-provider ,它会自动注册到注册中心的。
第三步,启动服务消费者
利用 IDEA 启动服务消费者 springboot-consumer ,它也会自动注册到注册中心的,并在里面寻找自己调用的服务
第四步,打开浏览器调用接口
打开浏览器,调用 http://localhost:8081/user/user-name ,得到的结果如下
日志输出如下所示,虽然日志打印语句是写在服务提供者里面,但由于是消费者调用了,因此会打印到消费者所在服务,相当于是谁调用,就打印在谁那里。
至此,SpringBoot 整合 Dubbo+Zookeeper,就完成了。
【SpringBoot】12.SpringBoot整合Dubbo+Zookeeper相关推荐
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...
- SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统
QUESTIONl:SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统? ANSWER: 一:创建项目模块 1.1.创建一个Empty Project 名称:Dubbo 1.2. ...
- spring boot 整合Dubbo/Zookeeper
spring boot 整合Dubbo/Zookeeper 只是一个简单的整合demo,只做思路分析叙述,具体功能不做描述. 一.技术介绍 •ZooKeeper ZooKeeper 是一个分布式的,开 ...
- Springboot 整合 Dubbo/ZooKeeper你不知道的那点事,大神必修课
"看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一想,都没有什么大不了的.这能帮助自己在遇到挫折时稳定心态,想得更开." – <腾讯 ...
- springboot整合dubbo\zookeeper做注册中心
springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...
- SpringBoot整合Dubbo Zookeeper
1.环境准备 (1)软件下载 链接:https://pan.baidu.com/s/1z8ehuDRX7A85jj6AyMA-rg 提取码:hs3s (2)软件启动 cd ~/software/zoo ...
- SpringBoot通过dubbo-spring-boot-starter整合Dubbo出现的问题
异常信息org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestM ...
- 【SpringBoot整合Dubbo和Zookeeper】
本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一.Dubbo dubbo基本概念 调用关系说明 二.Dubbo环境搭建 三.Window下安装zookeeper ...
- springboot整合dubbo时连接zookeeper——天坑
本文主要针对使用springboot整合dubbo框架时使用zookeeper作为注册中心,在服务启动连接zookeeper产生的问题做一个详细的讲解. 主要针对两个异常 (1)java.lang.I ...
最新文章
- spring@PropertySource用法
- linux性能采用工具oprofile使用
- Zend Studio使用教程:使用PHPUnit检测代码(四)
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
- HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片
- python 线性回归回归 缺失值 忽略_python – 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?...
- byte数组添加数据_C#基于S7协议实现对PLC中DB块字节数据的获取及自定义textbox实现数据解析...
- 云垒·私有云一体化安全管理平台
- 微软新闻推荐:深度学习与 NLP 的融合, 
让 Windows 11“新闻与兴趣”知你所需...
- Sqlserver2008 数据库镜像会话的初始连接
- Navicat for my sql 数据结构导出(制作数据字典)
- 数据结构学习——浅谈哈希表开散列和闭散列
- M语言简单示例--网页数据抓取
- MeeGo系统Atom处理器 神秘设备现身俄罗斯
- 没有用递归,写了一个文本转成树的小程序,代码凑和看吧
- 什么叫单模光纤_单模光缆是什么?单模光缆怎么连接?
- VS2016相对路径起点
- signal信号详解
- MacBook Pro 入手一年了,到底香不香?
- 数据结构学习:哈希表
热门文章
- 基于Python实现的在线教育系统考试作业案例源代码APP大作业nodejs程序设计微信小程序计算机
- 【编程DIY】一.几个有趣的小程序
- 实战技法 - 短线操盘 (11)
- Coding and Paper Letter(八十七)
- 汉得 HAP (HAND Application Platform)
- CTFd运维-CTFd平台搭好后,遇到网页访问慢,卡顿非常厉害的解决方法
- python中for循环缩进_跟小白学Python数据分析——For循环
- 食品饮料行业商业供应链智能系统解决方案:智慧供应链平台助力企业搭乘数字化快车乘风破浪
- 调整autocad字体输入框大小
- java计算机毕业设计计算机专业在线学习评估软件-演示录像-源程序+mysql+系统+lw文档+远程调试