记录下springboot 与dubbo的集成
一、Dubbo介绍
Dubbo是阿里出的一个高性能的分布式微服务框架,它的特点是性能高、界面友好、文档齐全(特别是中文文档),是很多中小型公司快速搭建微服务的首选技术。前段时间被阿里重新进行维护,并进入Apache孵化器。迁移到Apache后也推出了新的starter,简单试用后感觉不错,为此特地写下这一系列笔记,用以记录。(整个项目的源码在最后一章,感兴趣的童鞋可以下载自己搭建试试,也可以将其作为脚手架搭建你自己的微服务)
Dubbo架构
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。
调用流程
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
二、搭建注册中心
在dubbo中,每一个服务都是分布式的,消费者与提供者的关系并不是一对一的关系,而是一对多,并且服务提供者的实例位置是未知的,如果都由开发者使用静态文件去维护这个关系显示不合适的,一方面是徒增工作量,另一方面是灵活度不高,如果服务提供者更换了服务器地址,那么需要重新配置等,所以目前比较推崇的方案是所有服务提供者均主动将自己的信息注册到同个地方中,而消费者只要一律从这个地方取他需要的东西即可,这个地方就是所谓的注册中心。目前dubbo可以选择的注册中心包括zookeeper、redis等,一般建议使用zookeeper,zookeeper安装如下。
https://blog.csdn.net/qq_39829030/article/details/95487011
三、搭建Dubbo Admin
在Dubbo中,一大杀器就是它的可视化监控界面,在这个界面中可以查看服务者、提供者的数量、状态等,并对服务降级、容错、屏蔽等提供了可视化操作。下面演示如何搭建Dubbo Admin。
1.克隆项目
apache 下的dubbo-admin git仓库 :https://github.com/apache/incubator-dubbo-ops
我们需要先把这个项目用git克隆到本地中。
我在这里用idea直接进行克隆并打开。
2.配置属性
我们再dubbo-admin 项目下找到dubbo.properties 配置文件src->main->webapp->WEB-INF->dubbo.properties
dubbo.properties
dubbo.registry.address=zookeeper://xx.xxx.xxx.xxx:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
dubbo-admin 默认两个登陆账号,一个是root,一个是guest
第一行是填写dubbo注册的zk地址
第二行是填写root的密码
第三行是填写guest的密码
3.放入tomcat容器并启动
3.1 配置启动项
3.2 添加Tomcat服务
根据自己条件看是添加远程的tomcat还是本地的。
3.3 配置tomcat
配置tomcat路径和端口
配置部署war包
打包项目(略)有了war包,我们就可以直接放到tomcat的webapp目录下,启动tomcat,它会自动解析该war包并提供服务。
四、搭建dubbo测试项目
1、创建dubboTest项目,导入pom.xml所需的jar
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.springboot</groupId>
<artifactId>dubboTest</artifactId>
<version>1.0-SNAPSHOT</version>
<name>springboot-dubbo-test</name>
<description>Spring Boot Dubbo Test</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<dubbo.version>2.6.2</dubbo.version>
<dubbo.rpc.version>2.6.2</dubbo.rpc.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-rpc-rest</artifactId>
<version>${dubbo.rpc.version}</version>
</dependency>
<!-- Spring Boot log4j依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>