版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
电商第二天:
分布式架构:
第一套:spring boot + spring cloud
第二套:spring boot + dubbo
1. dubbo 简介:是一款高性能Java RPC框架。
官网:dubbo.io
1.1 架构演变:
单一架构:ORM
垂直架构:MVC
分布式架构:RPC
流动性计算架构:SOA
1.2 DUBBO 架构图
1.3 注册中心
必须先安装JDK,
再安装zookeeper!
Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 [1]。
单机版
<dubbo:registry address="zookeeper://10.20.153.10:2181" />
集群版
<dubbo:registry address="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181" />
1.4 最佳实战
POJO,bean,domain,entity。 实体类
vo ,dto, 实体类
1.5 推荐用法
<dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService"
timeout="300" retry="2" loadbalance="random" actives="0" />
timeout:方法调用的超时时间
retries:失败重试次数,缺省是 2 [2]
loadbalance:负载均衡算法 [3],缺省是随机 random。还可以配置轮询 roundrobin、最不活跃优先 [4] leastactive 和一致性哈希 consistenthash 等
actives:消费者端的最大并发调用限制,即当 Consumer 对一个服务的并发调用到上限后,新调用会阻塞直到超时,在方法上配置 dubbo:method 则针对该方法进行并发限制,在接口上配置 dubbo:service,则针对该服务进行并发限制
1.6 dubbo 历史
dubbox 当当写的!
我们现在用2.6.x
1.7 dubbo 通信
dubbo 2.5.6版本新增了对netty4通信模块的支持,启用方式如下
1.8 协议参考手册
默认使用dubbo:// 通讯协议
2. SOA 架构搭建
在订单模块中 ,调用用户模块
使用dubbo 来完成上述的描述
3. 项目搭建
3.1 在github 官网上创建一个空的project
3.2 搭建gmall-parent 父工程 只定义jar 包版本号
3.3 搭建gmall-bean 实体类
3.4 搭建gmall-interface 主要写接口 对接业务层的接口
3.5 搭建gmall-common-util 工具类
gmall-web-util
gmall-service-util
3.6 搭建gmall-user-manage项目
该项目中放入mapper,以及service.impl
3.6.1 修改pom.xml
a. 父项目
b. 添加依赖
3.6.2 编写mapper
3.6.3 编写service.impl
3.6.4 配置数据源
4. 业务实现:
在订单模块中,通过 userId 查询用户的地址列表!
userId
userAddress 数据库表
select * from userAddress where userId = userId;
通过 userId 查询用户的地址列表 应该属于 用户模块的服务!
4.1 功能开发:
bean,mapper,service,service.impl,controller
4.1.1 搭建项目模块 gmall-order-web
修改pom.xml
a. 父项目
b. 添加依赖
4.1.2 调用user服务
测试结果:
Field userService in com.atguigu.gmall1205.order.controller.OrderController required a bean of type 'com.atguigu.gmall1205.service.UserService' that could not be found.
原因:
@Autowired 该注解表示从ioc 容器中获取对象 因为在8081 中本身没有改对象。
该对象存在8080 中!
不能从另一个容器中获取到该对象,所以报错!
解决方案:
使用dubbo 来解决,将服务发布注册中心上即可!
4.2 配置dubbo 的环境
4.2.1 先安装jdk {自己手动配置的,不要使用原生自带}
先卸载,然后再安装
vim /etc/profile
JAVA_HOME=/opt/jdk1.8.0_152
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/lib
export JAVA_HOME PATH CLASSPATH
source /etc/profile
java -version
4.2.2 再安装zookeeper!
cp zoo_sample.cfg zoo.cfg
进入bin 目录
./zkServer.sh start
./zkServer.sh status
Mode: standalone 单机版
查看进程!
ps -ef | grep zookeeper
结束进程
kill -9 pid
4.2.3 安装dubbo的监控中心
监控中心的本质就是一个 xxx.war 包 【动态web 工程 必须依赖服务器--tomcat】
安装完tomcat 之后,并启动!
停止tomcat !
./shutdown.sh
rm -rf dubbo-admin-2.6.0.war
mv dubbo-admin-2.6.0 dubbo-admin
重新启动tomcat!
./startup.sh
只要能访问 则说明监控中心安装成功!
http://192.168.67.217:8080/dubbo-admin/governance/consumers
4.2.4 如何使用dubbo!
添加依赖:
两个注解两个配置!
服务提供者:
一个注解一个配置
import com.alibaba.dubbo.config.annotation.Service;
@Service alibaba
application.properties
spring.dubbo.application.name=user-manage
spring.dubbo.registry.protocol=zookeeper
spring.dubbo.registry.address=192.168.67.217:2181
spring.dubbo.base-package=com.atguigu.gmall1205
spring.dubbo.protocol.name=dubbo
进行序列化
implements Serializable
服务消费者:
一个注解一个配置
import com.alibaba.dubbo.config.annotation.Reference;
application.properties
# dubbo 配置
spring.dubbo.application.name=order-web
spring.dubbo.registry.protocol=zookeeper
spring.dubbo.registry.address=192.168.67.217:2181
spring.dubbo.base-package=com.atguigu.gmall1205
spring.dubbo.protocol.name=dubbo
# 设置超时时间
spring.dubbo.consumer.timeout=10000
# 检查消费者
spring.dubbo.consumer.check=false
获取数据的时候,需要进行反序列化。
implements Serializable
error:
java.lang.IllegalStateException: Serialized class com.atguigu.gmall1205.bean.UserAddress must implement java.io.Serializable
正常启动顺序:
前提条件必须启动zk
如果zk 启动不了?
都是因为:JDK!
先启动服务提供者:
服务消费者: