SpringBoot集成Dubbo框架
1. Dubbo框架
Dubbo框架是一个高性能、重量轻、基于java的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程调用、容错和负载平衡,以及自动服务注册和发现。Dubbo可以和Spring框架无缝集成。官方的Dubbo框架如下图所示:
其核心部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo能做什么?
1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Dubbo的存在简单来说就是要减小service层的压力。由于Dubbo使用zookeeper作为服务注册中心,所以先需要在自己本地安装好zookeeper的环境,具体安装方式参考zookeepr的官方文档:https://zookeeper.apache.org/。安装完毕后,启动zookeepr服务。zoo.cfg的配置文件如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:\server\apache-zookeeper-3.6.1\data
clientPort=2181
2.搭建SpringBoot和Dubbo项目
首先基于maven工具创建一个空的项目,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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.chenpeng</groupId><artifactId>dubbo</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>dubbo-demo-api</module><module>dubbo-demo-provider</module><module>dubbo-demo-customer</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><zookeeper.version>3.4.13</zookeeper.version><dubbo.starter.version>0.2.0</dubbo.starter.version></properties><dependencies><dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.starter.version}</version></dependency><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><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>${zookeeper.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
接着在根项目录下创建三个子maven项目模块:
- dubbo-demo-api
- dubbo-demo-customer
- dubbo-demo-provider
在dubbo-demo-api 项目中创建测试的接口,添加sayHello方法,创建的DemoService.java文件具体内容如下:
package com.chenpeng.dubbo;/*** @Author: chenpeng* @Datetime: 2020/7/12 15:33* @Version: V1.0*/
public interface DemoService {String sayHello(String name);
}
在 dubbo-demo-provider(提供者)项目中实现DemoService接口,创建DemoServiceImpl.java的文件内容如下:
package com.chenpeng.dubbo.provider;import com.alibaba.dubbo.config.annotation.Service;
import com.chenpeng.dubbo.DemoService;
import org.springframework.stereotype.Component;/*** @Author: chenpeng* @Datetime: 2020/7/12 16:24* @Version: V1.0*/
@Service
@Component
public class DemoServiceImpl implements DemoService {public String sayHello(String name) {return "Hello " + name;}
}
在 dubbo-demo-customer(消费者)项目中调用DemoService中的sayHello接口方法,创建Controller,HelloController.java:
package com.chenpeng.dubbo.controller;import com.alibaba.dubbo.config.annotation.Reference;
import com.chenpeng.dubbo.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author: chenpeng* @Datetime: 2020/7/12 16:58* @Version: V1.0*/
@RestController
public class HelloController {@Referenceprivate DemoService demoService;@RequestMapping(value = "/hello")public String hello() {String hello = demoService.sayHello("xiaopeng");System.out.println(demoService.sayHello("JUST"));return hello;}
}
在 dubbo-demo-provide 中添加项目的启动类DemoApplication.java如下:
package com.chenpeng.dubbo;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 服务提供者** @Author: chenpeng* @Datetime: 2020/7/12 16:40* @Version: V1.0*/
@EnableDubbo
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
其次添加Dubbo服务注册的配置,resource/application.yml文件内容如下:
server:port: 9011spring:application:name: spring-boot-dubbo-providerdubbo:application:name: spring-boot-dubbo-providerprotocol:name: dubboport: 20880registry:address: zookeeper://127.0.0.1:2181
同理,在 服务消费者dubbo-demo-customer 项目中添加服务的注册配置resource/application.yml:,以及消费者启动类CustomerApplication:
CustomerApplication.java文件具体内容如下:
package com.chenpeng.dubbo;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 消费者** @Author: chenpeng* @Datetime: 2020/7/12 17:00* @Version: V1.0*/
@EnableDubbo
@SpringBootApplication
public class CustomerApplication {public static void main(String[] args) {SpringApplication.run(CustomerApplication.class, args);}
}
resource/application.yml配置:
server:port: 9021spring:application:name: springboot-dubbo-consumerdubbo:application:name: springboot-dubbo-consumerregistry:address: zookeeper://127.0.0.1:2181consumer:timeout: 5000
在 dubbo-demo-customer服务消费者项目中创建controller接口实现对外功能的暴露,HelloController.java:
package com.chenpeng.dubbo.controller;import com.alibaba.dubbo.config.annotation.Reference;
import com.chenpeng.dubbo.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author: chenpeng* @Datetime: 2020/7/12 16:58* @Version: V1.0*/
@RestController
public class HelloController {@Referenceprivate DemoService demoService;@RequestMapping(value = "/hello")public String hello() {String hello = demoService.sayHello("xiaopeng");System.out.println(demoService.sayHello("JUST"));return hello;}
}
整体的项目文件结构的截图如下:
最后一步,就是分别启动服务提供者和服务消费者两个项目(注意启动顺序),然后浏览器访问http://localhost:9021/hello
3.使用dubbo-admin框架
Dubbo-2.6.1之后的版本中不在集成dubbo-admin,需要单独的安装下载配置,本实验中采用了从github上下载源代码,然后通过maven打包安装成jar包,最终通过直接运行jar包来启动dubbo-admin端。与上一节的步骤的前提条件一样,需要本地配置安装好zookeepr服务。
dubbo-admin的安装部署具体如下:
1. 下载源代码 git clone https://github.com/apache/dubbo-admin.git
2. 然后配置zookeeper服务的地址(如果需要修改) dubbo-admin-server/src/main/resources/application.properties
3. 接着运行 mvn install -D maven.test.skip=true 进行安装,在目录 dubbo-admin-server/target 中会生成jar包。
4. cmd命令到该目录下,运行 java -jar xxxx.jar --server.port=9999 , 后面所携带的参数是为了修改默认的端口,防止默认的8080端口被占用。
5. 访问:http://localhost:9999/,页面最终的效果如下:
SpringBoot集成Dubbo框架相关推荐
- 【dubbo】springboot集成dubbo框架
1. dubbo介绍 dubbo是一款开源rpc框架,提供rpc调用诸多组件.支持服务注册与发现.服务负载均衡.服务容错.服务降级处理.服务失败尝试机制.服务监控等组件. 当我们项目拆分成微服务时,A ...
- SpringBoot集成Dubbo
#博学谷IT学习技术支持# 文章目录 1. 构建SpringBoot环境 1.1 创建一个dubbo-parent项目 1.2 引入依赖坐标 2. Linux 环境配置 2.1 安装docker 2. ...
- SpringBoot集成MyBatis-Plus框架
1.说明 本文介绍Spring Boot集成MyBatis-Plus框架, 重点介绍需要注意的地方, 是SpringBoot集成MyBatis-Plus框架详细方法 这篇文章的脱水版, 主要是三个步骤 ...
- SpringBoot集成Log4j2框架
1.说明 本文详细介绍Spring Boot集成Log4j2框架的方法, 基于已经创建好的Spring Boot工程, 由于Spring Boot默认使用的是Logback框架, 需要先排除掉Logb ...
- SpringBoot集成MyBatis-Plus框架详细方法
1.说明 本文详细介绍Spring Boot集成MyBatis-Plus框架的方法, 使用MySQL数据库进行测试, 包括完整的开发到测试步骤, 从一开始的Spring Boot工程创建, 到MySQ ...
- 【Java从0到架构师】交错的日志系统、SpringBoot 集成日志框架
交错的日志系统.SpringBoot 集成日志框架 交错复杂的日志系统① - 多个项目实现 SLF4J 门面 交错复杂的日志系统② - 统一底层实现为 Logback 交错复杂的日志系统③ - 统一底 ...
- SpringBoot 集成FluentMyBatis 框架之集成分页功能
本文基于上一篇:SpringBoot 集成FluentMyBatis 框架之完善 SpringBoot 集成FluentMyBatis 框架之集成分页功能 FluentMyBatis 官方分页 官方提 ...
- SpringBoot集成Quartz框架
SpringBoot集成Quartz框架 (一)集成环境: Win10系统 JDK版本:11.0.13 SpringBoot版本:2.3.4.RELEASE Quartz版本:2.3. ...
- SpringBoot - 集成Quartz框架:Couldn‘t acquire next trigger: Couldn‘t retrieve trigger: 不良的类型值 long : \x
写在前面 SpringBoot 集成Quartz框架时,数据保存方式使用PostgreSQL进行数据库持久化. 报错如下: Couldn't acquire next trigger: Couldn' ...
最新文章
- 仓位 001 998 AUFNAHME不存在(L9009)
- SpringBoot中使用POI导出Excel时怎样循环数据库数据赋值
- maven工程导入项目打开404_Maven依赖配置和依赖范围
- 2012 人民搜索 实习生招聘 笔试题
- css div下第一个span,CSS之div和span标签
- linux 如何取执行一个脚本5000次,【shell笔记脚本】嵌套、控制循环以及处理循环输出...
- lisp 多段线转面域_Objectarx 相交矩形求并集 面域转多段线
- 电脑遇到打印机脱机状态如何解决
- TensorFlow使用--MNIST分类学习入门(感知机)
- ArcView Image Analyst v1.0.rar
- 《软件评测师教程》学习笔记-第一章:软件测试概述
- html转换成chm乱码,【全部解决】用Docbook生成htmlhelp + 【完全解决】生成的chm中标题和左边的索引目录是乱码的问题...
- 2.5css ps切图、
- excel设置数据点的标记格式
- 巨型电子计算机应用,1989年11月17日 我国首台小巨型电子计算机研制成功
- 送给你的一份英语学习资料,请查收!
- 2022-05-14前端周报 巴厘岛项目交接完成
- 百度AI实现m:n人脸搜索
- FreeModbus-移植到stm32f103
- MacBook Pro合上盖子不休眠的问题简单分析
热门文章
- GSMS软件系统华为应急通讯完美版安装教程
- C#实现DES加密解密
- HCI References
- PDF合同生成下载预览
- 校园网综合布线系统设计方案
- 现代CMake高级教程 - 第 3 章:链接库文件
- 测试组负责软件质量对吗,软件测试负责人如何开展只做核心功能测试又对软件质量负责的测试工作?...
- iis上ftp服务器用户设置,IIS设置FTP服务器,想请教一下怎样设置用户名和密码
- 《温度控制器PT100的测温查表分度表(1分度表)》 ---------lwl
- (happytime)Onvif Server端口占用 10013问题解决方法