Dubbo SpringBoot 实战
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官网
- 下载代码:
git clone https://github.com/apache/dubbo-admin.git
- 在
dubbo-admin-server/src/main/resources/application.properties
中指定注册中心地址 - 构建
mvn clean package -Dmaven.test.skip=true
- 启动
cd dubbo-admin-server/target; java -jar dubbo-admin-server-0.1.jar
- 访问
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 实战相关推荐
- 微服务资源springboot、springcloud、docker、dubbo项目实战等倾心分享
精彩内容 java实战练习项目教程 全网最全电子图书分享 你所需要的大数据视频教程 java全套学习视频教程及源码 今天又是周末,还是想给大家送一些福利,因为最近一直有小伙伴问我要springboot ...
- SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spri ...
- SpringBoot 实战 (九) | 整合 Mybatis
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实 ...
- SpringBoot 实战:如何从零开发 “淘宝”
疫情期间,不少人选择宅家购物. 但当你每天在"淘宝""京东""网易考拉"上剁手买买买,钱包瘪下去的时候,有没有考虑一下自己开发个商城呢? 钱 ...
- SpringBoot实战 之 异常处理篇
在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然 ...
- 32位数据源中没有mysql_[SpringBoot实战]快速配置多数据源(整合MyBatis)
前言 由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据 ...
- JWT认证原理、整合springboot实战应用
JWT认证原理.整合springboot实战应用 1.什么是JWT 2.JWT能做什么 3.与传统的session认证做对比 4.JWT结构 5.JWT的封装方法 1.什么是JWT JWT(Json ...
- springboot实战pdf_Java程序员中秋节福利发送:Spring boot+Redis实战文档「PDF」
中秋节越来越近了,平日里,各大公司拼员工拼技术拼实力:到了节日,则要拼奖金.拼福利.拼假期,还要拼创意.今天,小编为大家也准备了一份中秋节礼物,让我们一起来看看礼物是啥吧! Spring boot文档 ...
- SpringBoot实战(十三):Spring Boot Admin 动态修改日志级别
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...
最新文章
- 浅析网站首页设计需注意的要点
- Sitecake – 可视化编辑,所见即所得的 CMS
- mysql的联合索引_mysql联合索引
- LiveVideoStackCon 2021上海站 倒数计时:2
- 1.SoapUI接口测试--创建项目
- CVE-2019-0708 BlueKeep的扫描和打补丁
- linux命令编译C语言程序
- 工作流实战_06_flowable 流程定义的删除
- Android开发笔记(九十六)集合动画与属性动画
- bzoj千题计划127:bzoj1041: [HAOI2008]圆上的整点
- 垂直居中之父元素高度确定的文本
- 记ICS的lab2--bomb实验
- Unity 实现水纹波动效果
- LVM 逻辑卷管理(原理概念篇)
- js上传图片时添加水印
- KNN算法(10折交叉验证)
- 【信息系统项目管理师】第十六章 变更管理思维导图
- 前端做微信好友分享_前端实现微信平台实现分享
- Python人脸识别黑科技(二):教你使用python+Opencv完成人脸解锁
- 计算机 管理 mmc 注册表,我的注册表没有MMC文件
热门文章
- matplotlib.units.ConversionError: Failed to convert value(s) to axis units的解决及对plt.show()的理解
- Android实现沉浸式状态栏
- 为什么法线贴图(Normal Mapping)都是蓝色的?
- 【算法分析】贪心法详解+范例+习题解答
- 大佬横行的币圈,谁才是真正“一割”?
- Openflow协议
- 这一天到底是一年中的第几天
- 圣诞装饰的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Mockplus设计大赛获奖选手专访 | 千人静听:千人千面的音乐推荐与分享APP
- SQL约束之外键约束