1.Dubbo是什么

Apache Dubbo 是一款高性能、轻量级的RPC框架

Dubbo官网

1.1Dubbo可以做什么

Apache Dubbo提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维

1.1.1Dubbo架构

2.Dubbo整合SpringBoot

2.1安装DubboAdmin

2.1.1安装DubboAdmin后端服务

DubboAdmin官网

  1. 下载代码: git clone https://github.com/apache/dubbo-admin.git
  2. dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址
  3. 构建
    mvn clean package -Dmaven.test.skip=true
  4. 启动
    cd dubbo-admin-server/target; java -jar dubbo-admin-server-0.1.jar
  5. 访问 http://localhost:8080

2.1.2安装DubboAdmin前端服务

之前克隆的代码,进入 dubbo-admin-ui目录,
打开cmd命令行,执行
npm install ,然后执行npm run dev
即可访问DubboAdminWeb界面
访问地址
http://localhost:8082

2.2搭建Zookeeper作为rpc注册中心

使用Docker搭建Zk
docker run -d --name=zookeeper -p 2181:2181 zookeeper

2.3搭建SpringBoot服务生产者项目

2.3.1新建一个SpringBoot项目,在om.xml中添加依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.8</version></dependency><!-- 对zookeeper的底层api的一些封装 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency><!-- 封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式Barrier --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.12.0</version></dependency>

2.3.2配置application.properties

# 应用名称
spring.application.name=rpc-provider-demo
# 应用服务 WEB 访问端口
server.port=8070dubbo.application.name=${spring.application.name}
demo.service.version=1.0.0
dubbo.scan.base-packages=com.example.rpcproviderdemo.jacksondemo.servicedubbo.protocol.name=dubbo
dubbo.protocol.port=-1
dubbo.registry.address=zookeeper://180.76.250.119:2181

2.3.3定义一个rpc接口

接口类IShopRpc .java

public interface IShopRpc {public String sayHello(String name);public String ping();public String test3(Integer aaa);
}

实现类ShopRpcImpl.java

import com.example.rpcproviderdemo.jacksondemo.service.IShopRpc;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
@DubboService(version = "1.0.0",group = "shop")
public class ShopRpcImpl implements IShopRpc {private static Long countInvk =1L;@Value("${dubbo.application.name}")private String serviceName;@Overridepublic String sayHello(String name) {System.err.println("rpc调用成功了!");return String.format("hhh ,%s : Hello, %s", serviceName, name);}@Overridepublic String ping() {countInvk++;System.err.println(countInvk);return "pong";}@Overridepublic String test3(Integer aaa) {return "success: "+aaa.toString();}
}

2.3.4启动服务,观察dubboAdmin上已经有一个rpc接口

2.4搭建SpringBoot服务消费者项目

2.4.1新建一个SpringBoot项目,在om.xml中添加依赖

    <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.8</version></dependency><!-- 对zookeeper的底层api的一些封装 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency><!-- 封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式Barrier --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.12.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

2.4.2配置application.properties

# 应用名称
spring.application.name=rpc-consumer-demo# 应用服务 WEB 访问端口
server.port=8071dubbo.application.name=${spring.application.name}
demo.service.version=1.0.0dubbo.scan.base-packages=com.example.rpcproviderdemo.jacksondemo.service
dubbo.protocol.name=dubbo
dubbo.registry.address=zookeeper://180.76.250.119:2181

2.4.3定义之前的rpc接口

在这个项目里再次定义IShopRpc.java,要另起一个包写接口,包名要和上一个服务中的IShopRpc接口的包名一致

package com.example.rpcproviderdemo.jacksondemo.service;
public interface IShopRpc {public String sayHello(String name);public String ping();public String test3(Integer aaa);
}

不需要写实现类,因为rpc调用,只要知道provider服务暴露的接口就可以了。

2.4.4在消费者服务里调用这个rpc接口

这里直接写到启动类里,正常要写到业务层代码里。

package com.example.rpcconsumerdemo;import com.example.rpcproviderdemo.jacksondemo.service.IShopRpc;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@Slf4j
@EnableDubboConfig
@SpringBootApplication
public class RpcConsumerDemoApplication {@DubboReference(version = "1.0.0",group = "shop",timeout = 100,methods = {@Method(name = "sayHello", timeout = 300),@Method(name = "ping", timeout = 200),@Method(name = "test3", timeout = 200),})private IShopRpc shopService;public static void main(String[] args) {SpringApplication.run(RpcConsumerDemoApplication.class, args);}@Beanpublic ApplicationRunner runner() {return args ->{log.warn(shopService.ping());log.warn(shopService.sayHello("mercyblitz"));log.info(shopService.test3(123456));};}
}

2.4.5启动消费者服务,观察rpc调用情况

消费者服务的控制台

生产者服务的控制台
DubboAdminWeb界面

rpc服务列表
rpc接口详情

rpc服务关系

源代码分享

rpc生产者

https://gitee.com/lzh2019/rpc-provider-demo.git

rpc消费者

https://gitee.com/lzh2019/rpc-consumer-demo.git

总结

dubbo框架以前是阿里内部的rpc框架,现在交由开源组织Apache维护,导致一些注解等用法发生了改变。
之前的dubbo教程,都会让你用dubbo提供的@Service 和 @Reference 注解 ,来标注 rpc接口。但是现在apache Dubbo做了更新。
从依赖包即可看出<groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.8</version></dependency>现在官方给出的 dubbo-spring-boot-starter 中已经没有了之前的注解, 而是用 @DubboService 和@DubboReference 来分别标注服务提供者的rpc接口 和 服务消费者的 rpc接口。apache dubbo 官方开发了一个新版的监控管理中心 dubboAdmin,该版本和阿里很早之前的dubboAdmin功能相差不大,只是用vue重构了,做成了前后端分离的web。
但是ApacheDubboAdmin里提供了负载均衡、服务关系、接口文档等功能增加了dubbo的可玩性,大家可以尝试一下。

Dubbo SpringBoot 实战相关推荐

  1. 微服务资源springboot、springcloud、docker、dubbo项目实战等倾心分享

    精彩内容 java实战练习项目教程 全网最全电子图书分享 你所需要的大数据视频教程 java全套学习视频教程及源码 今天又是周末,还是想给大家送一些福利,因为最近一直有小伙伴问我要springboot ...

  2. SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spri ...

  3. SpringBoot 实战 (九) | 整合 Mybatis

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实 ...

  4. SpringBoot 实战:如何从零开发 “淘宝”

    疫情期间,不少人选择宅家购物. 但当你每天在"淘宝""京东""网易考拉"上剁手买买买,钱包瘪下去的时候,有没有考虑一下自己开发个商城呢? 钱 ...

  5. SpringBoot实战 之 异常处理篇

    在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然 ...

  6. 32位数据源中没有mysql_[SpringBoot实战]快速配置多数据源(整合MyBatis)

    前言 由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据 ...

  7. JWT认证原理、整合springboot实战应用

    JWT认证原理.整合springboot实战应用 1.什么是JWT 2.JWT能做什么 3.与传统的session认证做对比 4.JWT结构 5.JWT的封装方法 1.什么是JWT JWT(Json ...

  8. springboot实战pdf_Java程序员中秋节福利发送:Spring boot+Redis实战文档「PDF」

    中秋节越来越近了,平日里,各大公司拼员工拼技术拼实力:到了节日,则要拼奖金.拼福利.拼假期,还要拼创意.今天,小编为大家也准备了一份中秋节礼物,让我们一起来看看礼物是啥吧! Spring boot文档 ...

  9. SpringBoot实战(十三):Spring Boot Admin 动态修改日志级别

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...

最新文章

  1. 浅析网站首页设计需注意的要点
  2. Sitecake – 可视化编辑,所见即所得的 CMS
  3. mysql的联合索引_mysql联合索引
  4. LiveVideoStackCon 2021上海站 倒数计时:2
  5. 1.SoapUI接口测试--创建项目
  6. CVE-2019-0708 BlueKeep的扫描和打补丁
  7. linux命令编译C语言程序
  8. 工作流实战_06_flowable 流程定义的删除
  9. Android开发笔记(九十六)集合动画与属性动画
  10. bzoj千题计划127:bzoj1041: [HAOI2008]圆上的整点
  11. 垂直居中之父元素高度确定的文本
  12. 记ICS的lab2--bomb实验
  13. Unity 实现水纹波动效果
  14. LVM 逻辑卷管理(原理概念篇)
  15. js上传图片时添加水印
  16. KNN算法(10折交叉验证)
  17. 【信息系统项目管理师】第十六章 变更管理思维导图
  18. 前端做微信好友分享_前端实现微信平台实现分享
  19. Python人脸识别黑科技(二):教你使用python+Opencv完成人脸解锁
  20. 计算机 管理 mmc 注册表,我的注册表没有MMC文件

热门文章

  1. matplotlib.units.ConversionError: Failed to convert value(s) to axis units的解决及对plt.show()的理解
  2. Android实现沉浸式状态栏
  3. 为什么法线贴图(Normal Mapping)都是蓝色的?
  4. 【算法分析】贪心法详解+范例+习题解答
  5. 大佬横行的币圈,谁才是真正“一割”?
  6. Openflow协议
  7. 这一天到底是一年中的第几天
  8. 圣诞装饰的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. Mockplus设计大赛获奖选手专访 | 千人静听:千人千面的音乐推荐与分享APP
  10. SQL约束之外键约束