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. 编程菜鸟的日记-Linux无处不在

    原文来自:http://www.linuxfederation.com/linux-everywhere Linux无处不在 “Linux无处不在.从空间站到微波炉到有Linux.”你可能听说很多以及 ...

  2. Javascript Read Excel

    本文引用以下路径 https://www.cnblogs.com/liuxianan/p/js-excel.html

  3. ef.core Mysql

    Entity层 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; ...

  4. VS2017Release+x64失败,LNK1104,无法打开文件"msvcprt.lib"

    采用VS2017+Qt5.10联合开发环境建立开发,将Qt的库包含到VS中使用VS2017的Debug+x64模式调试程序,通过并出现对应的EXE应用程序! 但是转换到Release+x64模式出现问 ...

  5. pytorch可视化工具visdom

    visdom的github repo: https://github.com/facebookresearch/visdom 知乎一个教程:https://zhuanlan.zhihu.com/p/3 ...

  6. flink入门实例-Windows下本地模式跑SocketWordCount

    一般情况下,开发大数据处理程序,我们希望能够在本地编写代码并调试通过,能够在本地进行数据测试,然后在生产环境去跑“大”数据. 一.nc工具 配置windows的nc端口,在网上下载nc.exe(htt ...

  7. javascript基础(Array)

    1,join() Array.join(),不改变原数组,将数组中所有元素转换为字符串并连接在一起,返回最后生成的字符串 let a=[1,2,3]; a.join(); // =>" ...

  8. 神经网络_线性神经网络 3 (Nerual Network_Linear Nerual Network 3)

    1 LMS 学习规则_解方程组 1.1 LMS学习规则举例 X1=[0 0 1]T,t1=0:X2=[1 0 1]T,t2=0:X3=[0 1 1]T,t3=0:X1=[1 1 1]T,t1=1. 设 ...

  9. RevDebug -- VS 调试神器,你值得拥有!

    1. What's RevDebug Don't debug - replay! Trace the root cause of bugs in a matter of seconds, save y ...

  10. FFmpeg 结构体学习(一): AVFormatContext 分析

    在 FFmpeg 学习(六):FFmpeg 核心模块 libavformat 与 libavcodec 分析 中,我们分析了FFmpeg中最重要的两个模块以及重要的结构体之间的关系. 后面的文章,我们 ...