基于Maven的分布式应用开发及部署踩坑实录(1)          返回主页

本文主要记录最近在开发的一个基于Maven的分布式应用的一些踩坑经过及解决方案,其中的技术点是经常会用到的,在这里统一记录一下作为以后的一个参考。

Nginx的使用

项目的发布中用到了Nginx,Nginx是一款高性能的反向代理服务器,正在逐步的取代Apache成为WEB服务器的事实标准。

windows环境下的Nginx使用很方便。只需要下载相关的压缩包并解压即可开箱即用。

需要注意的是:

    目录位置不能有中文
    80端口不能被占用

常用的命令

    启动      start nginx.exe
    关闭      nginx -s stop
    重新加载    nginx -s reload
    netstat -aon|findstr "80"  查看端口占用情况

正向代理反向代理的区别

项目的Nginx就是作为反向代理而存在的,当业务压力增大,后台需要部署多台Tomcat,在它们之前需要部署Nginx作为负载均衡服务器实现项目的横向部署。

这里需要区别一下正反向代理服务器。

正向代理(Forward Proxy)

        一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。

        关于正向代理的概念如下: 

        正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,
        为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),
        然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。
        客户端必须要进行一些特别的设置才能使用正向代理。

        从上面的概念中,我们看出,文中所谓的正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】

反向代理(reverse proxy)

        反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,
        并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求
        ,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。 

到这里,可以看出正向反向是相对而言的,它是取决于代理服务部署的位置而言的,可以这么说,部署在客户端的代理服务就是正向代理,部署在服务端的代理服务就是反向代理。

在项目后端的Tomcat是不能直接知道那个客户端访问了它,访问的直接来源就是反向代理服务器。

Maven的使用

  1. 在实际的开发中为了合作开发的方便及部署打包的便利及构建的自动化,常常将项目分为多个子项目,不同的子项目内部又有多个模块。根据Maven的继承和聚合共同组成了项目整体。
  2. 项目中应有一个parent工程,它负责总的依赖管理,子工程通过继承该父工程。在父工程开启依赖管理,然后子工程中选择性添加父工程中的pom依赖项。

    <parent>
        <groupId>com.taotao.parent</groupId>
        <artifactId>taotao-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
         <relativePath>../taotao-parent/pom.xml</relativePath>
    </parent>
    
  3. 打包类型的选择:

    父工程一般打包为POM
    common工程及工具类工程打包为Jar
    web端项目打包为WAR
    
  4. 关于聚合
    1. 这里举个例子,比如有这样一个web工程:WebDemo。项目采用SSM架构。我们考虑建立四个模块:
      1. POJO 基本实体类
      2. Mapper/DAO 持久化接口或实现
      3. Service 服务类
      4. Controller/web 控制器
    2. 我们将每个模块都建立为WebDemo的子模块工程。这里的继承关系为四个模块继承WebDemo,WebDemo继承parent
    3. 项目间存在调用关系,因此制定依赖关系
      1. web依赖service
      2. service依赖Mapper
      3. Mapper依赖POJO,和传统开发基本类似
  5. 导入依赖的原则:
    1. 所有的工程都需要的依赖应该在聚合工程(taotao-manage)中导入。
    2. 在使用依赖的最底层导入。
    3. 运行时所需要的依赖在web工程中加入。

 SVN冲突

 冲突就是在同一个版本基础之上,多个人对该文件修改了修改,其中一个人将文件提交到SVN,
这时,该文件已经是新的版本,但是,其他人的本地还是旧的版本,
这时,其他人并不知道该文件已经有了新的版本,执行提交操作,这时就产生了冲突。

解决冲突的核心思想:为了避免冲突,要在最新的版本之上修改(也就是说修改之前先更新),再提交。

如果我更新了之后,在编写代码的同时别人将该文件再次更新(我不可能时时刻刻都查看更新),
这时直接提交会造成冲突,正确的做法是:提交之前将该文件先执行与资源库同步操作,先将冲突解决掉再提交代码。

eclipse中SVN插件的安装及使用

  1. Help->Eclipse MarketPlace
  2. 输入:svn或者subclipse
  3. 点击subclipse的install按钮一路下一步安装
  4. 安装完毕重启eclipse
  5. window->show view->other 输入svn
  6. 选择SVN资源库
  7. 添加一个SVN仓库位置
  8. 在工程位置右键Team->Share Project即可将工程添加到SVN管理
  9. 切换视图,选择要提交的文件,选择提交即可提交到对应位置
  10. 可以在SVN视图下右键选择add folder直接操作远程仓库