zoukankan      html  css  js  c++  java
  • ssm改造为dubbo项目

    为什么要用dubbo?

    先贴上官网:https://github.com/apache/incubator-dubbo。

    一般 nginx+tomcat
             | ----> Controller1--------->service1
    请求----->nginx  |
             |----->Controller2--------->service2
    请求进了Controller 就只有一条路可以走了
     
    使用dubbo后
                  | ------->service1
    请求------>Controller---->   |
                  |---------->service2
    简单的说 也就是 一个Contoller 我可以部署多个 service   。
     
    一般的mvc项目 包含 Controller、Service、ServiceImpl、dao三层
    使用doubbo我们可以把项目拆分:
    Controller 作为 “消费着” 一个项目
    ServiceImpl +dao 作为 “提供者” 一个项目
    Servicei “接口” 可以作为一个项目
    本项目我接手的时候由两个项目构成,一个用户端,一个管理端。经过各种重构后还是不太满意,各种服务复用性不好(同一个接口得两边都要写,修改一个服务得修改两次),目前初步构想用dubbo 来重构,service集中起来作为服务提供者,两个web 项目作为两个消费者。

    准备工作

    1、安装zookeeper

    2、部署dubbo-amdin

    去官网下载dubbo,解压得到dubbo-admin,maven编译。

    出现错误:Missing artifact com.alibaba:dubbo:jar:2.8.4 dubbo,

    去maven网上上并没有发现2.8.4

    将版本替换为2.6.2,打包发布

    登录时,admin /guest一直登录不上。回过头来看配置文件、无语。

    dubbo.admin.root.password=root
    dubbo.admin.guest.password=guest

    准备工作到这儿就完成了。

    创建maven项目

    1、首先创建4个maven项目,其中xtel为pom项目,api为jar项目,server、web为war项目

     

    xtel-api主要写实体类和定义接口,maven install后会在本地生成jar包,在xtel-server,xtel-web中引用

    注意:实体类一定要实现序列化。

     

    xtel-server

     pom文件

    <?xml version="1.0"?>
    <project
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>com.cdxt</groupId>
    		<artifactId>xtel</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    	</parent>
    	<artifactId>xtel-server</artifactId>
    	<name>xtel-server</name>
    	<packaging>war</packaging>
    	<url>http://maven.apache.org</url>
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    <!--依赖引用--> <dependency> <groupId>com.cdxt</groupId> <artifactId>xtel-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!--mybatis 数据访问层 start --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.0.RELEASE</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.0.8</version> </dependency> <!--mybatis 数据访问层 end --> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> </plugin> </plugins> </build> </project>

     dubbo生产者配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://code.alibabatech.com/schema/dubbo
           http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
    	<dubbo:application name="dubbo-server" />
    
    
    	<dubbo:registry address="zookeeper://localhost:2181" />
    	<!-- 用dubbo协议在20880端口暴露服务 -->
    	<dubbo:protocol name="dubbo" port="20880" />
    	<!--使用 dubbo 协议实现定义好的 api.PermissionService 接口 -->
    	<!--具体实现该接口的 bean 
    	<dubbo:service interface="com.cdxt.xtel.api.group.GroupManageService"
    		ref="groupManageService" protocol="dubbo" />-->
         <!-- 使用注解方式暴露 --> <dubbo:annotation package="com.cdxt.xtel.server.impl"/> </beans>

     orm层配置

          <!--配置整合mybatis过程 -->
    
    	<!--1、配置数据库相关参数 -->
    	<context:property-placeholder location="classpath:jdbc.properties"
    		ignore-unresolvable="true" />
    
    	<!-- 阿里 druid数据库连接池 -->
    	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
    		destroy-method="close">
    		<!-- 数据库基本信息配置 -->
    		<property name="url" value="${jdbc.url}" />
    		<property name="username" value="${jdbc.username}" />
    		<property name="password" value="${jdbc.password}" />
    		<!--<property name="passwordCallback" ref="dbPasswordCallback"/> -->
    		<property name="driverClassName" value="${jdbc.driverClassName}" />
    		<property name="filters" value="${jdbc.filters}" />
    		<!-- 最大并发连接数 -->
    		<property name="maxActive" value="${jdbc.maxActive}" />
    		<!-- 初始化连接数量 -->
    		<property name="initialSize" value="${jdbc.initialSize}" />
    		<!-- 配置获取连接等待超时的时间 -->
    		<property name="maxWait" value="${jdbc.maxWait}" />
    		<!-- 最小空闲连接数 -->
    		<property name="minIdle" value="${jdbc.minIdle}" />
    		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    		<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
    		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    		<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
    		<property name="validationQuery" value="${jdbc.validationQuery}" />
    		<property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
    		<property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
    		<property name="testOnReturn" value="${jdbc.testOnReturn}" />
    		<property name="maxOpenPreparedStatements" value="${jdbc.maxOpenPreparedStatements}" />
    		<!-- 打开removeAbandoned功能 -->
    		<property name="removeAbandoned" value="${jdbc.removeAbandoned}" />
    		<!-- 1800秒,也就是30分钟 -->
    		<property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
    		<!-- 关闭abanded连接时输出错误日志 -->
    		<property name="logAbandoned" value="${jdbc.logAbandoned}" />
    	</bean>
    
    	<!--mapper解析 -->
    	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"
    		p:configLocation="classpath:mybatis-config.xml" p:dataSource-ref="dataSource"
    		p:mapperLocations="classpath:com/cdxt/xtel/server/mapper/**/*Mapper.xml">
    		<property name="typeAliasesPackage"
    		value="com.cdxt.xtel.pojo.group,com.cdxt.xtel.pojo.lesson,com.cdxt.xtel.pojo.sys" />
    	</bean>
    
    	<!-- sqlSessionFactory -->
    
    	<!-- 声明接口 -->
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
    		p:sqlSessionFactoryBeanName="sqlSessionFactoryBean">
    		<property name="basePackage"
    			value="com.cdxt.xtel.server.mapper.sys,
    			com.cdxt.xtel.server.mapper.group,com.cdxt.xtel.server.mapper.lesson" />
    
    	</bean>
    </beans>
    

     spring配置

    	<!-- 自动扫描dao和service包(自动注入) -->
    	<context:component-scan base-package="com.cdxt.xtel.server.*" />
    	
        <!--配置事务管理器(mybatis采用的是JDBC的事务管理器)-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!--配置基于注解的声明式事务,默认使用注解来管理事务行为-->
        <tx:annotation-driven transaction-manager="transactionManager"/>
    

     service层代码

    xtel-web

    dubbo消费者配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <dubbo:application name="dubbo-web"/>
        <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
        <dubbo:registry address="zookeeper://localhost:2181"/>
         <!-- 使用注解方式暴露 -->
        <dubbo:annotation package="com.cdxt.xtel.web"/>
       
    </bean
    

    controller层

    启动server 后我们就可以通过dubbo-admin观察到服务已经完成了注册

     

     

  • 相关阅读:
    设置网络
    href
    webpack学习
    那些个像素
    jquery Id选择器与document.getElementByIdy区别
    又一个很垃圾的设计
    卸载QQ,360,迅雷,搜狗
    CheckFail设计很垃圾
    js写法【2】
    require的定义看不懂【2】
  • 原文地址:https://www.cnblogs.com/magic101/p/9550508.html
Copyright © 2011-2022 走看看