技能栏_聚合工程/Nginx/FastDFS/jsonp/Httpclient

1.聚合工程

集合工程也称为maven多模块,是分布式系统的基础和框架

1.1 聚合工程的优点在哪里体现?

之前我们搭建一个SSM的后台管理系统,大概分为以下几个包

  • com.taotao.manage.pojo
  • com.taotao.manage.mapper
  • com.taotao.manage.service
  • com.taotao.manage.controller

但是在分布式系统中,每个系统的模块之间是会有联系的,比如订单系统需要用到后台管理系统中的com.taotao.manage.pojo,我们之前的做法是直接将pojo复制到订单系统中,但是这样不利于管理,比如后台系统中的pojo发生了改变,订单系统中pojo也要进行修改,十分难维护,如果将后台管理系统的pojo变成一个jar包,订单系统也可以依赖这个jar包.这就是聚合工程的意义

简而言之:聚合工程可以将其中不同的模块分别打成jar包,其他工程就能依赖这些jar包


1.2 基本的聚合工程

一个基本的聚合工程一般由pom工程,jar工程,web工程组成

  • 1.pom工程:用在父级工程或聚合工程中。用来做jar包的版本控制。
  • 2.war工程:将会打包成war,发布在服务器上的工程。如网站或服务。
  • 3.jar工程:将会打包成jar用作jar包使用。

示例:

  • manage:就是一个pom工程
  • web是一个war工程
  • service、mapper、pojo则是jar工程

技能栏_聚合工程/Nginx/FastDFS/jsonp/Httpclient
聚合工程内部的模块,通过在pom中add Dependencies就可以直接依赖,而不用将某个模块maven install,通常情况下都是web依赖service,service依赖mapper,mapper依赖pojo,pojo依赖外部的公共jar

引入依赖后,就能使用依赖中定义的类和存在的jar包了
技能栏_聚合工程/Nginx/FastDFS/jsonp/Httpclient
注意:引用外部的jar时,比如taotao-common,要实现将taotao-common进行maven install,在仓库中形成jar包,之后才能通过坐标引入

具体可参考:通过聚合工程来实现SSM一文,其中为了让前台系统和后台系统jar包版本一致,我们还定义了一个parent模块


2.SwitchHosts和Nginx(反向代理)

我们现在都是直接通过ip来访问服务器的,本地我们使用127.0.0.1,虚拟机上我们设置为192.168.56.101(自定义)
但是在实际环境中我们都是通过域名来访问地址,比如 www.baidu.com

2.1 SwitchHosts

我们访问 www.baidu.com,浏览器通过域名到DNS查找服务器ip地址,然后进行访问
我们并没有在网上注册域名,所以肯定找不到,但是此时我们就可以使用到SwitchHosts

(1)域名解析

  • 本地域名解析
    用户 → www.taobao.com → 本机的hosts文件中查找域名映射的IP地址,如果查找到就返回IP

  • 域名服务器解析:
    用户 → www.taobao.com → 本地域名解析失败 → 浏览器通过域名到DNS查找服务器ip地址 → 执行访问

既然我们无法通过域名服务器解析,所以我们就通过修改本机的hosts文件,配置域名和映射的ip地址,直接修改本机的Hosts文件比较麻烦,需要记忆地址,这里我们采用一款软件:switchHosts

2.2 Nginx(反向代理)

我们现在可以通过 www.taotao.com:8080, manage.taotao.com:8081 访问本地的web项目,那有没有办法在访问的时候不携带端口,我们知道如果不携带端口访问,默认访问的是80端口,同一个服务器下无法存在两个端口一个的服务,所以我们想到了Nginx

(1)修改switchHosts中域名映射
因为我们将Nginx装在了虚拟机上,所以域名的映射也应该是虚拟机ip
技能栏_聚合工程/Nginx/FastDFS/jsonp/Httpclient

(2)反向代理设置:
Nginx默认会使用80端口
技能栏_聚合工程/Nginx/FastDFS/jsonp/Httpclient

流程:
1)用户访问 http://manage.taotao.com/rest/page/index
2)域名解析,得到地址:192.168.56.101。也就是nginx所在的虚拟机
3)因为是默认端口80,被Nginx监听到,Nginx解析请求
4)Nginx将服务转发到:192.168.56.1:8081,就是tomcat所在的主机
5)tomcat监听8081,所以最终被Tomcat处理

3.FastDFS以及使用nginx访问FastDFS

以前我们上传一个文件,都是保存在项目所在目录,或者tomcat所在的机器
用户以后如果要访问图片,也肯定是有这台机器中的tomcat来处理请求。
但是图片是静态资源,静态资源应该由静态web服务器处理,即我们的Nginx,但是图片不在nginx的机器上,就有问题

以前图片存在以下问题:
1.图片必须保存在tomcat机器,所以只能通过tomcat服务器处理
2.图片资源越来越多,存储不下
3.所有图片都在一台机器下,容易出单点故障

分布式文件系统是指可以将用户上传的很多很多文件保存在多台计算机上,主要解决单台服务器硬盘容量不够用问题,并且能够做到数据传输的负载均衡、以及数据存储的主从备份。


4.Jsonp和HttpClient

方式有2种

  • js访问(异步)_接口通过返回
    • 有跨域__通过jsonp:接口服务返回js脚本(函数名(json)),前台执行js脚本,在回调函数中对json进行处理
    • 无跨域__通过ajax:接口服务返回json,前台在ajax的匿名函数中对json进行处理
  • java代码访问
    • Httpclient
上一篇:object对象转objectToJson json转pojo jsonToPojo json转集合 jsonToList


下一篇:转换器模式