基于SpringCloud2.X搭建微服务电商项目

项目中有哪些访问源?
1、PC端
2、移动端(安卓、IOS)
3、H5(微信公众号)
4、微信小程序

分布式基础设施有哪些?
1、阿波罗配置中心
2、LCN分布式事务协调者
3、分布式任务调度平台XLL-Jab
4、分布式消息中间件RabbitMQ
5、分布式日志收集ELK
6、分布式缓存Redis
7、七牛云分布式存储
8、腾讯云MySQL服务

项目需要被其他项目继承,该项目使用POM类型
不被其他项目继承是jar类型
父用工程,子都用模块

先写接口后写实现
服务接口中包含内容:实体类、接口

统一采用getmapping或者postmapping,因为swagger中要区别类型

swagger依赖jar放在api项目中,注解统一在api接口中

注解统一写在接口中,实现类中写注入就好了

swagger地址:http://localhost:8300/swagger-ui.html

生产环境不弄swagger

内网不需要网关
外网需要网关
问题:
1.http://127.0.0.1/app-mayikt-member/memberInvokeWinxin为什么这样能访问到接口

Maven私服:自己搭建的Maven仓库,内网下载jar包速度快,有些公司的开发项目不能连外网,就得通过maven私服去下载jar包,私服可以连外网
本地仓库:
Maven工程
Maven坐标
通过Maven坐标从Maven工程引入jar包,本地仓库中没有对应的jar包就会通过Maven坐标从远程仓库下载jar包

Maven私服如果没有jar包,手动打入本地仓库或者私服中

企业级私服,私服是不允许外网访问的,因为里面有些是自己的jar包,公开会泄密

Maven私服应用场景:
1、缓存企业级jar
2、微服务开发中,实现对微服务接口实现发布与调用
3、正常在微服务开发中,不会引入其他接口源码项目,都是引入接口jar进行调用,所以把jar发布到私服仓库中

基于Docker搭建Maven私服

1.下载一个nexus3的镜像
docker pull sonatype/nexus3
2.将容器内部/var/nexus-data挂载到主机/root/nexus-data目录。
docker run -d -p 8081:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
关闭防火墙,访问http://ip:8081
Maven私服启动容器稍微比较慢,等待1分钟即可。
默认登陆账号 admin admin123

默认密码不生效解决:https://www.cnblogs.com/wbl001/p/11154828.html

mvn deploy

如何判断文件是否发生改变
如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同。比较常用的文件hash算法有MD5和SHA-1。

gitLab

子网ip:192.168.77.0
子网掩码:255.255.255.0
网关ip:192.168.77.2

IPADDR=192.168.77.0
GATEWAY=192.168.77.2
NETMASK=192.168.77.2
DNS1=211.136.112.50

Job for network.service failed because the control process exited with error code. See "systemctl st

挂载文件

Maven私服:http://192.168.3.101:8081
GitLab:http://192.168.3.101:8090
阿波罗:http://192.168.3.101:8080
http://192.168.3.101:8070
http://192.168.3.101:8060

发布到Maven私服上必须要是release版本的,不能是测试版本的

微服务网关swagger如何集成阿波罗,实现动态添加微服务

为什么使用阿波罗而不使用springcloudconfig?
界面化,国人写的适合国人
存在数据库中,git上阅读性差

阿波罗超时https://hacpai.com/article/1574586067509

com.netflix.discovery.shared.transport.TransportException: There is no known eureka server; cluster server list is empty

在微服务项目中,阿波罗分布式配置中怎么区别不同项目的配置文件?
通过appid,每一个项目有自己独立的appid

转换工具
http://www.toyaml.com/index.html

内网访问是安全的,外网是不安全的

不是所有的配置都是马上生效的,比如端口号,就必须重启项目,还有扫包

阿波罗会把配置持久化到硬盘中,不怕宕机,也可以集群

为什么不同@Value获取配置?

注意:不是所有的配置文件都会在阿波罗平台修改后,就会立马生效,因为没有采用监听刷新配置文件。

阿波罗学习文档https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D

Wxjava框架开发微信公众号

外网映射工具Natapp
网址https://natapp.cn/
http://lh-mayikt.natapp1.cc/getApp
cmd运行natapp -authtoken=6f8b72e320f2f

微信公众号原理:微信服务器转发数据包

WxJava 微信公众号框架 https://github.com/Wechat-Group/WxJava

5秒内要返回数据给客户端,不然会超时

为什么没有controller,因为controller是用来控制页面的,前后端分离了,没有controller了

定义泛型T有一个缺点,一个service里返回的实体类只能是一种

统一返回的方式
继承
静态
new 实体类

md5单向加密

get和postmapping在参数接受上的区别

vo:页面表单相关,视图层
bo:
dto:接口
do:数据库

不同端唯一登录:

普通的实体类是和数据库表一一对应的,且是对外开放的,容易受到攻击,比如改变用户的状态,所以一些重要的字段不能传递

请求参数与返回参数如果公用同一个实体类会存在哪些问题?
可能会暴露数据库字段,会被攻击,所以要将数据库实体类和接口实体类分开

开发环境使用Bebug详细日志,生产用info打印核心日志或者error

登录分为:
唯一登录:
单点登录:
普通登录:

为什么一个接口单独定义一个dto登录?
目的是为了解耦,不然swagger里面登录接口有很多不需要的字段

Token和Session的区别?
Token是存在redis中的,分布式共享的,类似sessionID

常量也要进行区分

XSS

tokenPC端用cookie存放在本地,ios和安卓也是存放在本地文件中

比如密码不能为空,这种要放到配置中心中,或者zk

变量什么时候用什么时候声明,不要提前声明,会占内存

怎么保持数据库和redis数据一致性问题,同时提交,同时回滚

需要修改的地方?
1、消息模版
2、PC这个消息源不能写死
3、

声明事务@Transaction不能控制redis事务
自定义方法使用编程事务同时控制redis事务和数据库事务,编程事务就是手动挡

手动事务不能设置成单例的,会存在线程安全问题

或者使用cancl框架保持一致性

图形验证码作用:防止机器模拟实现接口调用

图形验证码的请求加了随机数,是为了每次url都不一样,防止浏览器缓存上次验证码

通过注解形式对前端提交的参数进行验证,postget都行吗?

enreka中没有显示服务名称,是因为配置文件中有两个spring开头的配置,因为覆盖了

为什么常量写在接口里,因为不用写public static final,接口里默认是静态常量

eureka客户端不能注册的问题,配置文件eureka前面不能有空格

QQ联合登录:OAuth2.0协议
QQ互联

将腾讯开放平台Sdk4J放入本地Maven私服仓库中

mvn install:install-file -Dfile=jar包的位置(参数一) -DgroupId=groupId(参数二) -DartifactId=artifactId(参数三) -Dversion=version(参数四) -Dpackaging=jar

mvn install:install-file -Dfile=“C:\Users\Administrator\Desktop\Sdk4J.jar” -DgroupId=com.tengxun -DartifactId=sdk4j -Dversion=1.0 -Dpackaging=jar

accessToken为空,使用反编译工具查看源码
因为其中要用到state,是从session中保存和获取的,要保持域名一至

PortalWeb动静分离架构

在一个网站中,

微信联合登陆。思路和qq的一致,都是遵循同样的协议。就是测试麻烦,要用特殊的工具

流程。1.先受权获取到受权码2通过授权码获取到accessToken3.通过accesstoken获取到openid4,通过opid获取到用户信息

遵循一样的授权协议

动静分离和前后分离的区别?动静分离,动态资源jsp、ftl和静态资源js、img、css分开部署。前后分离,接口与视图分开独立

静态资源服务器平台(对象文件存储 内置CDN内容分发):
1、nginx(不推荐)
2、七牛云
3、阿里云
4、腾讯云

幂等?

调用七牛云接口上传图片

动静分离架构缺点:
会存在跨域问题,www.mayikt.com和static.mayikt.com,使用nginx解决
img和css不存在跨域问题,js,xhr存在

解决分布式session一致性问题:
背景:服务器集群,session存放的数据在不同的服务器中
1、使用spring-session框架
1.配置文件加redis配置
2.pom引入依赖
3.加上一个配置类
2、使用token代替session

SSO中包括jwt

SSO单点登录系统设计原理:
1、客户端访问第一个系统的时候,如果过滤器中判断用户未登录,会重定向到SSO认证授权系统、登录成功之后跳转原来地址
2、返回会有一个xxl-sso-session存放在本地cookie中

项目中为什么使用SSO?
大型互联网公司中,公司旗下可能会有很多子系统,不可能说每个系统都去登录一下,SSO就是为了登录一个系统,实现统一管理其他系统就不用登录了,域名不同的系统,比如支付宝和

XXL-SSO框架实现单点登录,这个是国产的,cas是国外的

客户端要集成redis

开热部署模拟不了集群环境‘

项目中如何集成XXL-sso?肯定是修改框架,应该修改哪些地方?
一、认证授权中心
1、需要注册到Eureka上
2、修改登录验证接口(调用会员数据库验证)
3、修改登录界面
二、SSOClient继集成
1、集成XXLSSLConfig使用XXLSSOwebFilter(注意排除请求)

分布式基础设施中创建server端,拷贝demo

得是同一个浏览器,cookie是存放在浏览器中?
cookie信息是存放在同一个域名中的,一个域名一个cookie,加上服务端也有一个,如果有两个客户端的话就有三个cookie

cookie是会被浏览器缓存,存在在内存中,本地硬盘上也有

退出登录怎么删除cookie?
删除服务端cookie,和其中一个客户端cookie。

重启sso为什么不用重新登录?因为是存放在redis中的,有缓存

如何保证sso-server端高可用问题?
集群,如何保证数据一致性?他走的本来就是数据库,不存在数据不一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
序言 自从Martin Fowler对微服务作出定义之后,微服务便火遍大江南北, 网上出现很多文章来描述它的好处,也有很多文章来说明它的弊端。这便 让很多小伙伴无所适从,微服务究竟是什么,要不要使用微服务架构,怎 么实施微服务架构?我一直认为,微服务架构只是新瓶装老酒,这老酒就 是模块化。如果在做系统设计时,已经把模块化做得很好,转型微服务只 是顺理成章的事。如果模块化都做不好,转型微服务只会带来灾难。 2014 年底,我们团队意识到 Docker 技术可以帮我们大幅度提高软 件产品的性能,降低硬件的投入,提高运维效率,便开始着手研发基于 Docker 的 PaaS 平台。随后,很快发现,PaaS 平台只是解决了软件生命周 期后半部分(运维)的问题,就思考能否通过 Docker 技术来提高开发团 队的效率。例如,降低团队成员流动带来的风险,提高多团队协作的效率, 找到组件或知识积累的方法,让同一个软件产品能够适应不同客户的定制 化需求,等等。从此,就与微服务结下了不解之缘。这些目标确定后,通 用的PaaS平台的研发目标也就变成了解决以上问题的微服务平台的研发, 以及后来的青柳云平台本身的微服务化的实践。 在做微服务架构技术选型的时候,我们以“无侵入”和“社区活跃” 为最主要的考量点,也只有这样,将来在升级为原子服务架构、量子服务 架构的时候,甚至是恢复成单体架构的时候,代价才是最小的。所以,在 3 InfoQ 中文站 为数不多的可选项中,我们拥抱了 Spring Cloud。最后的结果就是使用 基于 Docker 的微服务平台进行开发和运行运维支撑,使用 Spring Cloud 进行业务系统开发,两者相互独立,并可被独立替换。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值