dubbo前置课

1 . dubbo是什么

dubbo是服务调用,可以代替feign controller调用service

2. dubbo架构

image-20220707174633103

image-20220707174621026

3. dubbo基本使用

3.1 服务提供者

1. 导依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
<!--dubbo的起步依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>

2. 写yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server:
port: 18081
spring:
datasource:
url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
application:
name: user-provider
logging:
level:
cn.itcast: debug
pattern:
dateformat: HH:mm:ss:SSS
dubbo:
protocol:
name: dubbo
port: 20881
registry:
address: nacos://127.0.0.1:8848
scan:
base-packages: cn.itcast.user.service

3.改注解
1
2
3
4
5
在service实现类的@servcie注解改为@DubboService注解
把这个service不在交割spring管理,而是交给dubbo管理
@DubboService
public class UserServiceImpl implements UserService

3.2 服务消费者

1.导依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
<!--dubbo的起步依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>

<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>

2.写yml

提供者不需要

1
2
3
4
5
dubbo:
protocol:
name: dubbo
port: 20881

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server:
port: 18080
spring:
application:
name: user-consumer
logging:
level:
cn.itcast: debug
pattern:
dateformat: HH:mm:ss:SSS
dubbo:
registry:
address: nacos://127.0.0.1:8848

3.改注解
1
2
3
4
5
@Autowired改为@DubboReference

@DubboReference
private UserService userService;

1
2
3
dubbo不能请求发对象,如果想法对象必须实现序列化
public class User implements Serializable {}

3.3启动检查

1
2
3
4
5
6
dubbo:
registry:
address: nacos://127.0.0.1:8848
consumer:
check: false

3.4超时与重试

1
2
3
4
5
dubbo:
consumer:
timeout: 3000
retries: 0

3.5多版本

3.6负载均衡

image-20220707175143732

1.技术选型
前端:

flutter + android + 环信SDK + redux + shared_preferences + connectivity + iconfont + webview + sqflite

管理端:

vue

后端:

Spring Boot + SpringMVC + Mybatis + MybatisPlus + Dubbo
Elasticsearch geo 实现地理位置查询
MongoDB 实现海量数据的存储
Redis 数据的缓存
Spark + MLlib 实现智能推荐
第三方服务 环信即时通讯
第三方服务 阿里云 OSS 、 短信服务
第三方服务 虹软开放平台 / 阿里云

img

2.技术解决方案
使用Elasticsearch geo实现附近的人的解决方案
使用Spark + Mllib实现智能推荐的解决方案
使用MongoDB进行海量数据的存储的解决方案
使用采用分布式文件系统存储小视频数据的解决方案
使用百度人脸识别的解决方案
使用阿里云进行短信验证码发送的解决方案

2、前后端分离

2.1、前后端分离的概述

项目基于前后端分离的架构进行开发,前后端分离架构总体上包括前端和服务端,通常是多人协作开发

  • 前后端分离开发基于HTTP+JSON交互

  • 通过接口文档(API文档)定义规范

  • 前后端按照文档定义请求及响应数据

image-20210714095914770

2.2、YAPI介绍

YAPI已经在linux虚拟机中准备好了

请求地址:http://192.168.136.160:3000/

用户名/密码:tanhua@itcast.cn/123456

对于接口的定义我们采用YApi进行管理,YApi是一个开源的接口定义、管理、提供mock数据的管理平台。

mock数据,YApi提供了mock功能,就是模拟服务端返回测试数据: