Dubbo 简介

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成

它提供了三大核心能力:

  • 面向接口的远程方法调用
  • 智能容错负载均衡
  • 服务自动注册和发现。

可以看出图中存在着五种角色:

  • Provider:服务提供者
  • Consumer:服务消费者
  • Registry:服务注册中心
  • Monitor:服务监控中心
  • Container:服务运行的容器

图上的过程可以这么来解释:

  1. 在容器(Container)启动服务的提供者(Provider)
  2. 服务的提供者(Provider)将服务以接口的形式注册到注册中心(Registry)
  3. 服务的消费者(Consumer)向注册中心订阅服务
  4. 注册中心向服务的消费者返回服务的提供者提供的服务接口(异步)
  5. 服务的消费者去调用服务的提供者(同步)
  6. 监控中心负责统计服务的调用次数和调用时间的日志服务。

这里我们采用 zookeeper 作为服务注册中心,这里我查阅官方文档发现 Redis 也可以作为Dubbo的注册中心,只不过在应用中比较少见,而且官方文档中也说明了:

如果我们想用的话,只需要把dubbo.registry.addrss的值改为redis://127.0.0.1:6379即可使用。

理论到这里,下面就让我们来进入实战吧~

zookeeper的安装

这里我是在 Mac OS 环境下进行安装,你可以在本地安装虚拟机来完成这个操作。

首先我们需要前往官网下载安装包。

# 0. 解压
tar -zxvf zookeeper-3.4.13.tar.gz
# 1. 切换到解压后的目录下
cd zookeeper-3.4.13/
# 2. 建立data和logs目录
mkdir data
mkdir logs
# 3. 复制zoo_sample.cfg 为 zoo.cfg
cd conf/
cp zoo_sample.cfg zoo.cfg
# 4. 修改配置
vi zoo.cfg
dataDir=刚刚新建的data目录的绝对路径
logDir=刚刚新建的data目录的绝对路径
# 5. 启动
cd ../bin
./zkServer.sh start
# 6. 检测是否启动成功
./zkServer.sh status

实例

编写Provider

引入我们项目需要的Maven依赖:

<! --这里的包不要写错了,我试了一下阿里的starter,发现有很多问题,并没有这个好用 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>

然后对注册中心以及服务接口包的暴露的配置

spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=27899
spring.dubbo.scan=indi.viyoung.dubbo.provider.service

编写Service接口和实现类:

public interface TestService {
String test();
}
@Service
public class TestServiceImpl implements TestService { @Override
public String test() {
return "Hello Wolrd";
}
}

需要注意的是这里的Service注解必须是dubbo包下的哟,可千万别写错了!

编写Consumer

同样要引入依赖:

<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>

Consumer的配置的话比较少:

spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181

直接在Controller中引用

public class TestController {

    @Reference
private TestService testService; @RequestMapping()
public String hello() {
return testService.test();
}
}

注意这里的@Reference注解不要写错,应该是Dubbo包下的!

然后把项目启动后,我们访问一下:

Nice,访问成功!

下面,我们来学习一下Dubbo-Admin的使用

Dubbo-Admin

Dubbo-Admin之前给我的感觉就是没有UI的样子:



大概就长这个样子,贼丑,但是不知道啥时候悄悄摸摸的更新了一波,变得让颜值控也是非常满意,而且支持jar包启动,不用再去单独的安装Tomcat~

git clone https://github.com/apache/incubator-dubbo-ops.git

首先从Git上把这个项目拉下来,用IDEA打开:

只需要添加一个端口号的配置,然后使用左侧的maven打包工具打包:

然后去dubbo-admin-server的target的目录下使用以下命令:

 java -jar dubbo-admin-server-0.1.jar >run.log &

然后打开浏览器,输入localhost:7070

对比之前的UI简直强了无数倍,而且贼方便!

具体的功能大家可以跟着操作之后去探讨,这里就不再展开来说了。

今天的文章就到这里,下面宣布一个好消息:

活动通知

原定于粉丝达到一定数量后做送书活动回馈大家,由于本公号博主真爱技术佛系涨粉,无运营无套路,所以增粉速度**超**,原定目标短时间内无法达成,因此决定**清明小长假**过后就开启送书活动,大家久等了!感谢大家的信任支持与相伴,笔芯

扫码即可参加活动

Spring Boot 2.x (十五):Dubbo + Zookeeper + 新版Dubbo Admin的更多相关文章

  1. Spring Boot教程(十五)使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程

    在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建.而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也 ...

  2. Spring Boot 2.X(十五):集成 Swagger2 开发 API 文档(在线+离线)

    前言 相信很多后端开发在项目中都会碰到要写 api 文档,不管是给前端.移动端等提供更好的对接,还是以后为了以后交接方便,都会要求写 api 文档. 而手写 api 文档的话有诸多痛点: 文档更新的时 ...

  3. 学习Spring Boot:(十五)使用Lombok来优雅的编码

    前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的. 正文 添加依赖 在 pom.xml ...

  4. Java Spring Boot VS .NetCore (五)MyBatis vs EFCore

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  5. spring boot实战(第十二篇)整合RabbitMQ

    前言 最近几篇文章将围绕消息中间件RabbitMQ展开,对于RabbitMQ基本概念这里不阐述,主要讲解RabbitMQ的基本用法.Java客户端API介绍.spring Boot与RabbitMQ整 ...

  6. spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

    spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...

  7. Spring Boot 2.X(十):自定义注册 Servlet、Filter、Listener

    前言 在 Spring Boot 中已经移除了 web.xml 文件,如果需要注册添加 Servlet.Filter.Listener 为 Spring Bean,在 Spring Boot 中有两种 ...

  8. Spring Boot 2.X(十二):定时任务

    简介 定时任务是后端开发中常见的需求,主要应用场景有定期数据报表.定时消息通知.异步的后台业务逻辑处理.日志分析处理.垃圾数据清理.定时更新缓存等等. Spring Boot 集成了一整套的定时任务工 ...

  9. Spring Boot 2.X(十四):日志功能 Logback

    Logback 简介 Logback 是由 SLF4J 作者开发的新一代日志框架,用于替代 log4j. 主要特点是效率更高,架构设计够通用,适用于不同的环境. Logback 分为三个模块:logb ...

随机推荐

  1. 把.zip文件转化为.tar.gz文件

    工作中正好用到上传tar.gz文件,没有现成的转换工具,就写了方法转换 #encoding: utf-8import osimport tarfileimport zipfileimport osim ...

  2. 数组的初始化&缩窄转换

    1.初始化: 初始化就是在声明变量的同时给变量赋值,而不是声明后再赋值. 先声明,后赋值: int a; //先声明,由于没有初始化,所以当前a的值是变量a创建前,相应的内存单元中保留的值,是未知的 ...

  3. koa2学习(二) 中间件router

    中间件 koa-router 安装 npm install --save koa-router 使用 const Koa = require('koa'); const Router = requir ...

  4. 多选ui实现单选效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. [Bash]LeetCode192. 统计词频 | Word Frequency

    Write a bash script to calculate the frequency of each word in a text file words.txt. For simplicity ...

  6. [Swift]LeetCode866. 回文素数 | Prime Palindrome

    Find the smallest prime palindrome greater than or equal to N. Recall that a number is prime if it's ...

  7. ELK之filebeat、logstash多个topic配置

    启动多个进程收集日志.直接output到kafka,output到不同的topiccat filebeat.ymlfilebeat.prospectors:- input_type: log path ...

  8. HTML入门教程,多年心血总结,一看就会

    笔者在武汉蚂蹄软件服务中心做软件开发多年,最近花一天时间总结出一套HTML入门级的教程,全篇没有任何废话,全部是精华,希望对你入门web开发有一定的帮助. HTML基本格式 <html> ...

  9. jquery监听video标签视频播放暂停状态

    由于jquery中没有video的paly,pause方法,所以在使用jquery来控制视频的播放的播放状态时会出现问题 之前的代码: let $video = $('#video'); $('.pl ...

  10. api-ms-win-crt-process-l1-1-0.dll 丢失的处理,遇到问题和完美解决

    api-ms-win-crt-process-l1-1-0.dll 丢失的处理 简介 在换了新电脑后,一些环境需要重新搭建,本以为是个小case,没想到竟然遇到了各种拦路虎. 在成功安装Python3 ...