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相关推荐

  1. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...

  2. SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统

    QUESTIONl:SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统? ANSWER: 一:创建项目模块 1.1.创建一个Empty Project 名称:Dubbo 1.2. ...

  3. spring boot 整合Dubbo/Zookeeper

    spring boot 整合Dubbo/Zookeeper 只是一个简单的整合demo,只做思路分析叙述,具体功能不做描述. 一.技术介绍 •ZooKeeper ZooKeeper 是一个分布式的,开 ...

  4. Springboot 整合 Dubbo/ZooKeeper你不知道的那点事,大神必修课

    "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一想,都没有什么大不了的.这能帮助自己在遇到挫折时稳定心态,想得更开." – <腾讯 ...

  5. springboot整合dubbo\zookeeper做注册中心

    springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...

  6. SpringBoot整合Dubbo Zookeeper

    1.环境准备 (1)软件下载 链接:https://pan.baidu.com/s/1z8ehuDRX7A85jj6AyMA-rg 提取码:hs3s (2)软件启动 cd ~/software/zoo ...

  7. SpringBoot通过dubbo-spring-boot-starter整合Dubbo出现的问题

    异常信息org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestM ...

  8. 【SpringBoot整合Dubbo和Zookeeper】

    本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一.Dubbo dubbo基本概念 调用关系说明 二.Dubbo环境搭建 三.Window下安装zookeeper ...

  9. springboot整合dubbo时连接zookeeper——天坑

    本文主要针对使用springboot整合dubbo框架时使用zookeeper作为注册中心,在服务启动连接zookeeper产生的问题做一个详细的讲解. 主要针对两个异常 (1)java.lang.I ...

最新文章

  1. spring@PropertySource用法
  2. linux性能采用工具oprofile使用
  3. Zend Studio使用教程:使用PHPUnit检测代码(四)
  4. 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
  5. HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片
  6. python 线性回归回归 缺失值 忽略_python – 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?...
  7. byte数组添加数据_C#基于S7协议实现对PLC中DB块字节数据的获取及自定义textbox实现数据解析...
  8. 云垒·私有云一体化安全管理平台
  9. 微软新闻推荐:深度学习与 NLP 的融合, 让 Windows 11“新闻与兴趣”知你所需...
  10. Sqlserver2008 数据库镜像会话的初始连接
  11. Navicat for my sql 数据结构导出(制作数据字典)
  12. 数据结构学习——浅谈哈希表开散列和闭散列
  13. M语言简单示例--网页数据抓取
  14. MeeGo系统Atom处理器 神秘设备现身俄罗斯
  15. 没有用递归,写了一个文本转成树的小程序,代码凑和看吧
  16. 什么叫单模光纤_单模光缆是什么?单模光缆怎么连接?
  17. VS2016相对路径起点
  18. signal信号详解
  19. MacBook Pro 入手一年了,到底香不香?
  20. 数据结构学习:哈希表

热门文章

  1. 基于Python实现的在线教育系统考试作业案例源代码APP大作业nodejs程序设计微信小程序计算机
  2. 【编程DIY】一.几个有趣的小程序
  3. 实战技法 - 短线操盘 (11)
  4. Coding and Paper Letter(八十七)
  5. 汉得 HAP (HAND Application Platform)
  6. CTFd运维-CTFd平台搭好后,遇到网页访问慢,卡顿非常厉害的解决方法
  7. python中for循环缩进_跟小白学Python数据分析——For循环
  8. 食品饮料行业商业供应链智能系统解决方案:智慧供应链平台助力企业搭乘数字化快车乘风破浪
  9. 调整autocad字体输入框大小
  10. java计算机毕业设计计算机专业在线学习评估软件-演示录像-源程序+mysql+系统+lw文档+远程调试