浅谈分布式框架的搭建(一) 简单工程的搭建

    在之前学习spring的ssm框架时,我通常都是将工程发布到apache/tomcat 服务器下的。也就是说,一个的工程的controller层,service层还有dao层都需要在一个服务器下进行工作。这无疑会降低工作效率,如果我们可以将一个工程的业务发布到多个服务器下进行工作,这会使我们的工作效率提升很多。

    那么这就需要引入分布式工程。其中需要的工具有dubbo和zookeeper.

    首先,dubbo是一个分布式服务开发框架。在dubbo这个框架中,有许多重要的节点。

     Provider: 暴露服务的服务提供方。         

    Consumer: 调用远程服务的服务消费方。         

    Registry: 服务注册与发现的注册中心。         

    Monitor: 统计服务的调用次调和调用时间的监控中心。         

    Container: 服务运行容器。

  大家或许都知道生产者-消费者的问题。其中的Provider就是生产者,将服务进行暴露,也就是进行提供服务。而Consumer则是消费者,用来获取Provider提供的服务。注意,这些服务其实是一个一个的bean对象,也就是我们service层的业务逻辑处理对象。 Registry,服务注册和发现的注册中心。

服务容器负责启动,加载,运行服务提供者。  

服务提供者在启动时,向注册中心注册自己提供的服务。

服务消费者在启动时,向注册中心订阅自己所需的服务。

关于服务提供者和服务消费者之间的逻辑协调,需要交由zookeeper进行管理。

zookeeper是一个注册服务中心,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

之后我们还需要服务器来发布我们的web工程,这个服务器我们需要的是jetty服务器.

下面我以我自己的cube.shop工程为例,来首先介绍一下分布式工程的初步搭建。

首先我们需要先确定我们的工程的层次。因为我们要将视图层和业务层放在两个不同的服务器上,所以需要对我们的工程进行分层。

首先是总的父工程cube.shop

其下的三个主要的子工程cube.shop.common,cube.shop.manager.web,  cube.shop.manager

首先来配置cube.shop总的父工程,它应该打包成一个pom文件。

在cube.shop这个工程里面,我们需要配置所有子工程需要的jar包的版本号,以及需要的jar包.

在group Id 需要设置成统一的com.zzxt,当然所有的子工程的group Id都需要设置成com.zzxt。

并且需要在pom.xml文件里面进行设置。具体的设置如下

首先,我们需要把需要的版本号设置一下.

<properties>
		<junit.version>4.12</junit.version>
		<spring.version>4.3.14.RELEASE</spring.version>
		<mybatis.version>3.4.5</mybatis.version>
		<mybatis.spring.version>1.3.1</mybatis.spring.version>
		<!-- 分页使用 -->
		<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
		<pagehelper.version>5.1.2</pagehelper.version>
		<mysql.version>5.1.32</mysql.version>
		<slf4j.version>1.6.4</slf4j.version>
		<!-- mvc中返回json字符串中使用 -->
		<jackson.version>2.9.4</jackson.version>
		<!-- 连接池 -->
		<druid.version>1.1.8</druid.version>
		<!-- 模拟浏览器 -->
		<httpclient.version>4.3.5</httpclient.version>
		<jstl.version>1.2</jstl.version>
		<servlet-api.version>2.5</servlet-api.version>
		<jsp-api.version>2.0</jsp-api.version>
		<!-- 工具类对于时间的处理 -->
		<joda-time.version>2.9.9</joda-time.version>
		<commons-lang3.version>3.3.2</commons-lang3.version>
		<commons-io.version>1.3.2</commons-io.version>
		<!-- 分页工具 -->
		<commons-net.version>3.3</commons-net.version>
		<jsqlparser.version>0.9.1</jsqlparser.version>
		<commons-fileupload.version>1.3.1</commons-fileupload.version>
		<jedis.version>2.7.2</jedis.version>
		<!-- 搜索 -->
		<solrj.version>4.10.3</solrj.version>
		<!-- 分布式 -->
		<dubbo.version>2.5.3</dubbo.version>
		<!-- 注册中心的 -->
		<zookeeper.version>3.4.7</zookeeper.version>
		<zkclient.version>0.1</zkclient.version>
		<!-- 消息队列 -->
		<activemq.version>5.11.2</activemq.version>
		<!-- 当页面使用,可以生产网页,用代码生成html页面 -->
		<freemarker.version>2.3.23</freemarker.version>
		<quartz.version>2.2.2</quartz.version>
	</properties>

然后我们需要对我们的依赖进行管理,

<dependencies>
			<!-- 单元测试 -->
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>
			<!-- 日志处理 -->
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
				<version>${slf4j.version}</version>
			</dependency>

			<!-- Apache COMMONS工具组件 -->
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-lang3</artifactId>
				<version>${commons-lang3.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-io</artifactId>
				<version>${commons-io.version}</version>
			</dependency>
			<dependency>
				<groupId>commons-net</groupId>
				<artifactId>commons-net</artifactId>
				<version>${commons-net.version}</version>
			</dependency>

			<!-- 时间操作组件 -->
			<dependency>
				<groupId>joda-time</groupId>
				<artifactId>joda-time</artifactId>
				<version>${joda-time.version}</version>
			</dependency>

			<!-- JSP相关 -->
			<dependency>
				<groupId>jstl</groupId>
				<artifactId>jstl</artifactId>
				<version>${jstl.version}</version>
			</dependency>
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>servlet-api</artifactId>
				<version>${servlet-api.version}</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>jsp-api</artifactId>
				<version>${jsp-api.version}</version>
				<scope>provided</scope>
			</dependency>
			<!-- 文件上传组件 -->
			<dependency>
				<groupId>commons-fileupload</groupId>
				<artifactId>commons-fileupload</artifactId>
				<version>${commons-fileupload.version}</version>
			</dependency>

			<!-- Jackson Json处理工具包 -->
			<dependency>
				<groupId>com.fasterxml.jackson.core</groupId>
				<artifactId>jackson-databind</artifactId>
				<version>${jackson.version}</version>
			</dependency>

			<!-- httpclient -->
			<dependency>
				<groupId>org.apache.httpcomponents</groupId>
				<artifactId>httpclient</artifactId>
				<version>${httpclient.version}</version>
			</dependency>

			<!-- quartz任务调度框架 -->
			<dependency>
				<groupId>org.quartz-scheduler</groupId>
				<artifactId>quartz</artifactId>
				<version>${quartz.version}</version>
			</dependency>

			<!-- Mybatis -->
			<dependency>
				<groupId>org.mybatis</groupId>
				<artifactId>mybatis</artifactId>
				<version>${mybatis.version}</version>
			</dependency>
			<dependency>
				<groupId>org.mybatis</groupId>
				<artifactId>mybatis-spring</artifactId>
				<version>${mybatis.spring.version}</version>
			</dependency>
			<dependency>
				<groupId>com.github.miemiedev</groupId>
				<artifactId>mybatis-paginator</artifactId>
				<version>${mybatis.paginator.version}</version>
			</dependency>
			<dependency>
				<groupId>com.github.pagehelper</groupId>
				<artifactId>pagehelper</artifactId>
				<version>${pagehelper.version}</version>
			</dependency>
			<!-- MySql -->
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>${mysql.version}</version>
			</dependency>
			<!-- 连接池 -->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>druid</artifactId>
				<version>${druid.version}</version>
			</dependency>
			<!-- Spring -->
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-webmvc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jdbc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aspects</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jms</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context-support</artifactId>
				<version>${spring.version}</version>
			</dependency>

			<!-- Redis客户端 -->
			<dependency>
				<groupId>redis.clients</groupId>
				<artifactId>jedis</artifactId>
				<version>${jedis.version}</version>
			</dependency>
			<!-- solr客户端 -->
			<dependency>
				<groupId>org.apache.solr</groupId>
				<artifactId>solr-solrj</artifactId>
				<version>${solrj.version}</version>
			</dependency>
			<!-- dubbo相关 -->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>dubbo</artifactId>
				<version>${dubbo.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.zookeeper</groupId>
				<artifactId>zookeeper</artifactId>
				<version>${zookeeper.version}</version>
			</dependency>
			<dependency>
				<groupId>com.github.sgroschupf</groupId>
				<artifactId>zkclient</artifactId>
				<version>${zkclient.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.activemq</groupId>
				<artifactId>activemq-all</artifactId>
				<version>${activemq.version}</version>
			</dependency>
			<dependency>
				<groupId>org.freemarker</groupId>
				<artifactId>freemarker</artifactId>
				<version>${freemarker.version}</version>
			</dependency>
			<!-- maven安装插件的配置 -->
			<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.4</version>
</dependency>

这些都是我们需要的一些jar包,之后我们还需要对我们的需要的一些工程插件进行管理。

<build>
		<!-- 工程插件管理 -->
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.eclipse.jetty</groupId>
					<artifactId>jetty-maven-plugin</artifactId>
					<version>9.0.0.v20130308</version>
				</plugin>
			</plugins>
		</pluginManagement>
		<plugins>
			<!-- 资源文件拷贝插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			
		</plugins>
	</build>

这个就是对我们的总的父工程cube.shop的配置。

另外就是对我们的cube.shop.commons工程的配置。

首先,要配置的是一个简单的工程(Maven Project),其中group Id也是com.zzxt。artfact Id设置为cube.shop.commons.在设置Parent Project时将相应的 artfact Id设置为cube.shop。将这个工程打包成jar包。

之后需要配置的是cube.shop.manager工程.

同样配置一个简单的工程,其中group Id也是com.zzxt。artfact Id设置为cube.shop.manager.在设置Parent Project时将相应的 artfact Id设置为cube.shop。将这个工程打包成pom文件.

接下来就是要创建关于cube.shop.manager的模块

包含的是

cube.shop.manager.enetity

cube.shop.manager.service

cube.shop.manager.dao

cube.shop.manager.inter

cube.shop.manager.web.

下面我们来一个一个创建这几个模块.

首先是cube.shop.manager.enetity ,在cube.shop.manager这个工程下面,我们创建的是一个maven module项目。设置成一个简单的项目。

cube.shop.manager.dao

cube.shop.manager.inter这两个模块的创建和cube.shop.manager.enetity是相同的.

接下来是cube.shop.manager.service这个模块,它是要发布到服务器上进行业务逻辑的处理,所以将它打成war包。

而cube.shop.manager.web,把它放到cube.shop的工程下作为一个子模块,同样是打成war包.

我们把一个工程分成了多个子工程及其模块,为了是在多台服务器,同时进行业务的处理。

其实我们是将子工程或者子模块打成jar包引入到其他我们需要的子工程中。也就是所谓的依赖注入,我们来一个一个看。

在cube.shop.manager中,我们需要引入cube.shop.commons

<dependency>
  		<groupId>com.zzxt</groupId>
  		<artifactId>cube.shop.commons</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>

在cube.shop.manager.dao中需要引入cube.shop.manager.entity

<dependency>
  		<groupId>com.zzxt</groupId>
    	<artifactId>cube.shop.manager.entity</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
  	</dependency>

在cube.shop.manager.service需要引入cube.shop.manager.inter,cube.shop.manager.dao

<dependency>
  	<groupId>com.xtit</groupId>
    <artifactId>cube.xt.shop.manager.inter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  	</dependency>
  <dependency>
  	<groupId>com.xtit</groupId>
    <artifactId>cube.xt.shop.manager.dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  	</dependency>


在cube.shop.manager.web中需要引入cube.shop.manager.service

 <dependency>
  		<groupId>com.zzxt</groupId>
    	<artifactId>cube.shop.manager.service</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
  	</dependency>

工程的配置都已经完毕,剩下就是一些需要的插件的配置。

在我们的cube.shop.manager.web中引入jetty的插件

<plugin>
					<groupId>org.eclipse.jetty</groupId>
					<artifactId>jetty-maven-plugin</artifactId>
					<configuration>
						<httpConnector>
							<port>7000</port>
						</httpConnector>
					</configuration>
				</plugin>

猜你喜欢

转载自blog.csdn.net/qq1641530151/article/details/79780484
今日推荐