电商(2)

电商第二天:

分布式架构:
	第一套: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]。
			单机版
			
			集群版
			
		1.4	最佳实战
			 POJO,bean,domain,entity。 实体类
			 vo ,dto, 实体类 
			 
		1.5	推荐用法
			
				
				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!
						
						
						
						先启动服务提供者:
							服务消费者:

你可能感兴趣的:(个人学习记录)