茂展的分享博客

Dubbo基础

Dubbo基础

现在的网站规模在不断的扩大,常规的垂直应用结构已经无法应对,分布式架构就应运而生

发展演变
dubbo官网的演变图
架构演变

  1. 单一应用架构 所有功能写在一个工程,不利于维护,不能承受高流量访问压力
  2. 垂直应用架构 界面和业务逻辑没有实现分离,应用太过于独立,不利于之间交互
  3. 分布式服务架构 服务之间采用RPC调用,远程过程调用
  4. 流动计算架构 基于访问压力实时管理集群容量,提高集群的利用率

RPC框架:

  • dubbo
  • gRPC(google)
  • Thrift (微软)
  • HSF (阿里)
  • JSF (京东)

dubbo学习

dubbo特性
我们使用dubbo,首先我们进入官网,发现官网推荐我们使用zookeeper作为注册中心
所以,我们下载zookeeper,然后我们先在本地调试,步骤如下

  1. 首先我们下载好zookeeper,解压到本地,进入config文件夹,修改zoo_sample.cfg为zoo.cfg
  2. 我们打开zoo.cfg,找到 dataDir,修改地址,前提是我们已经创建好一个用于存放data的文件夹,修改为 创建好的data文件夹地址
  3. 进入bin目录,然后分别先后点击 zkServer.cmd ,zkCli.cmd (注:我们是在window环境下的原因,才点击这两个)
    启动完成

在dubbo启动成功前提下,我们可以安装启动zookeeper的管理控制台

  1. 首先我们去github下载,然后加压
  2. 然后进入dubbo-admin\src\main\resources文件夹下,找到application.properties,查看dubbo.registry.address是否正确
  3. 然后进入cmd执行mvn-clean,打包得到jar包,java-jar jar包,默认端口7001,然后访问结果,默认用户名和密码都是root
    dubbo管理台

dubbo2.6版本以前我们需要zookeeper作为注册中心,我们需要引入zkclient
dubbo2.6版本以后我们需要zookeeper作为注册中心,我们需要引入curator

代码基本入门

首先我们引入依赖(服务提供者)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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>cn.itcast</groupId>
<artifactId>user-service-provider</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>cn.itcast</groupId>
<artifactId>gmall-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>

</dependencies>
</project>
服务的消费者提供服务的provider.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

<!--当前服务的名称-->
<dubbo:application name="user-service-provider"></dubbo:application>

<!--指定注册中心的位置-->
<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
<!--或者-->
<!--<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>-->

<!--用dubbo协议在20880端口暴露服务-->
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!--声明需要暴露的服务接口--> <!--ref指向服务的真正的实现对象-->
<dubbo:service interface="com.itcast.gmall.service.UserService" ref="userServiceImpl"></dubbo:service>

<bean id="userServiceImpl" class="com.itcast.gmall.service.impl.UserServiceImpl"></bean>
</beans>

dubbo官方建议我们应该把公共类以及接口放在一个新的工程中

然后运行
1
2
3
4
5
6
7
8
9
10
public class MainApplication {

public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");
ioc.start();

System.in.read();
}

}
在dubbo管理中心展示

dubbo管理中心

接下来我们完成服务消费者

服务消费者的maven依赖和服务提供者的相同
然后我们创建consumer.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="com.itcast.gmall.service.impl"></context:component-scan>

<dubbo:application name="order-service-consumer"></dubbo:application>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
<!--声明需要调用的远程服务的接口;生成远程服务代理-->
<dubbo:reference interface="com.itcast.gmall.service.UserService" id="userService"></dubbo:reference>
</beans>
然后执行结束
1
2
3
4
5
6
7
8
9
10
public class MainApplication {

public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");
ioc.start();

System.in.read();
}

}
最终dubbo管理中心显示

消费者和生产者都创建完成

构建简单的控制中心dubbo-monitor-simple

首先我们使用mvn package构建Jar包,然后target中会有一个dubbo-monitor-simple-2.0.0-assembly.tar.gz,然后我们解压它,
进入配置文件conf文件下,看看dubbo.properties中配置是否正确,然后进入assembly.bin文件夹后,点击start.sh启动
启动后,那么怎么和服务关联在一起呢
根据dubbo官网的描述,我们需要使用

1
<dubbo:monitor protocol="registry"></dubbo:monitor>

分别配置服务器端和消费端,然后分别重启,或在监控中心看到
dubbo简单监控中心

------本文结束感谢阅读------
🐶 您的支持将鼓励我继续创作 🐶