Dubbo项目搭建(简单部署)
2017-06-15 16:25
405 查看
导语:Dubbo是阿里巴巴的一个分布式服务的开源框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
参考网站:http://dubbo.io/
部署环境:Windows7+Eclipse+Spring+SpringMVC+Mybatis+ Maven3.2.2+Tomcat
前言:项目梗概
1.dubbo是用来解决分布式提供服务的,目的就是按照业务逻辑模块将一个大工程分成多个服务,可能每个服务就只为一个业务模块提供服务,这样一个大工程就可以拆分成多个小工程服务模块组装而成。由接口层Interface、服务层Provider、消费层Consumer三层,如下图:
2.各层的分工职责:
接口层Interface:仅仅提供service接口,
服务层Provider:提供真正的服务实现
消费层Consumer:消费服务
Interface层是个jar包的形式,会在Provider和Consumer层pom文件中引入。Consumer层调用Interface层的服务接口,而不会直接去调用Provider层的服务实现。真正的Provider服务实现通过在zookeeper注册暴露服务接口的方式提供服务。
一、准备工作
1、Web工程配置:
a、校验jdk安装:参考jdk安装( java –version查看版本,建议使用1.7)
b、安装tomcat:tar解压到文件夹
c、yum install –y unzip
rm –rf /usr/local/tomcat/webapp/ROOT/* (清空Root目录下的内容)
unzip dubbo-admin-2.5.4.war –d /usr/local/tomcat/webapp/ROOT(安装dubbo-admin管理工具(直接将dubbo-admin项目放到服务器tomcat/webapps下面))
d、配置 hosts : vi /etc/hosts (配置相应的DNS)
a、【root@localhost】
127.0.0.1 localhost
127.0.0.1 root
b、【root@lgp】 //lgp只是一个例子
127.0.0.1 lgp
e、启动tomcat服务
./usr/local/tomcat/bin/startup.sh
2、zookeeper部署
a、先安装单台
server.X=A:B:C # 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 这里的x是一个数字,与myid文件中的id是一致的.
b、集群
三、整合zookeeper
四、Dubbo项目整合SpringMVC
1.maven配置
2、eclipse配置dubbo.xsd,解决标签不识别的问题
百度云盘:https://pan.baidu.com/s/1nuIKgMd
路径:http://code.alibabatech.com/schema/dubbo/dubbo.xsd
3、在.properties配置zookeeper的注册地址
dubbo.registry.address=192.168.1.72:2181,192.168.1.73:2182,192.168.1.74:2183
4、service提供服务:spring-dubbo-provider.xml
说明:address可以配置多个,若是zookeeper集群了,这里就应该配置多个zookeeper的地址
dubbo:protocol标签是用来配置服务提供方和服务适用方的网络协议的,详细:dubbo支持的常见协议
dubbo:service标签用来声明服务,timeout为超时时间
5、spring-context.xml引入spring-dubbo-provider.xml
6、在provider项目pom.xml中添加
7、配置服务消费方的xxx-consumer.xml
说明:这里address和提供方一样,不用过多阐述
dubbo:prorocol内的port与服务提供方端口一致就行了
dubbo:reference标签内的url,这个参数很重要,当一个团队有多个人在开发时,每个人都要把自己本机的服务注册到zookeeper上,若不加这个url参数的话,就会默认调一个服务,大家都会去调同一个服务,为防止这样的事情,加上url就好了,同一个zookeeper上port也不能重复,url配置模板:url=“dubbo://ip:服务端口”
8、将消费方的xxx-consumer.xml配置进消费方的spring.xml中
9、开发阶段启动dubbo服务,需要写一个主方法启动,但是如果打成jar包启动,dubbo会使用自己封装的启动方法去启动(也就可以将自己写的这个主方法删除了),这也是为什么会在pom.xml里面配置将spring.xml打包到classpath:spring/xxx.xml,这是dubbo封装的启动类指定路径(xxx.xml文件名没有要求)
dubbo项目打包可以参考:dubbo打包教程
五、dubbo项目部署
1、先将interface接口层打包成jar,直接打包到相应的maven本地库下
命令:mvn clean install
2、将provider服务提供项目打包成jar,然后将该项目所需的第三方依赖jar包手动copy到一个新建的lib文件夹(这个文件是在provider项目的pom.xml内指定了第三方jar包的获取路径),把provider项目jar包和lib文件夹放在同一目录下
启动:
a、若是本机上的话,cmd命令:Java -jar xxx.jar
b、Linux下,命令:nohup java -jar xxx.jar & (这是可在后台执行的,即使Ctrl+C也不会影响程序的后台运行)
3、将consumer项目打成war包,然后放在tomcat内启动就行了
Linux下命令:ps -ef | grep tomcat
kill -9 pid
./startup.sh
六、开发阶段,启动Dubbo服务
建议放在”src/test”目录下面
jdk下载地址
tomcat下载地址
dubbo-admin-2.5.4.war下载地址
参考网站:http://dubbo.io/
部署环境:Windows7+Eclipse+Spring+SpringMVC+Mybatis+ Maven3.2.2+Tomcat
前言:项目梗概
1.dubbo是用来解决分布式提供服务的,目的就是按照业务逻辑模块将一个大工程分成多个服务,可能每个服务就只为一个业务模块提供服务,这样一个大工程就可以拆分成多个小工程服务模块组装而成。由接口层Interface、服务层Provider、消费层Consumer三层,如下图:
2.各层的分工职责:
接口层Interface:仅仅提供service接口,
服务层Provider:提供真正的服务实现
消费层Consumer:消费服务
Interface层是个jar包的形式,会在Provider和Consumer层pom文件中引入。Consumer层调用Interface层的服务接口,而不会直接去调用Provider层的服务实现。真正的Provider服务实现通过在zookeeper注册暴露服务接口的方式提供服务。
一、准备工作
1、Web工程配置:
a、校验jdk安装:参考jdk安装( java –version查看版本,建议使用1.7)
b、安装tomcat:tar解压到文件夹
c、yum install –y unzip
rm –rf /usr/local/tomcat/webapp/ROOT/* (清空Root目录下的内容)
unzip dubbo-admin-2.5.4.war –d /usr/local/tomcat/webapp/ROOT(安装dubbo-admin管理工具(直接将dubbo-admin项目放到服务器tomcat/webapps下面))
d、配置 hosts : vi /etc/hosts (配置相应的DNS)
a、【root@localhost】
127.0.0.1 localhost
127.0.0.1 root
b、【root@lgp】 //lgp只是一个例子
127.0.0.1 lgp
e、启动tomcat服务
./usr/local/tomcat/bin/startup.sh
2、zookeeper部署
a、先安装单台
yum -y install openssh-clients :安装scp,用于不同机器上复制文件 mkdir /home/lgp :创建包用于存放 zookeeper cp –rf zookeeper-3.4.6.tar.gz /home/lgp cd /home/lgp tar -xzvf zookeeper-3.4.6.tar.gz cd zookeeper-3.4.6/conf/ mv zoo_sample.cfg zoo.cfg vi zoo.cfg :参考详情
server.X=A:B:C # 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 这里的x是一个数字,与myid文件中的id是一致的.
cd .. mkdir data //zk数据存储地址 mkdir logs //zk日志存放地址 touch /data/myid echo 1 > /home/lgp/ zookeeper-3.4.6/data/myid vi /etc/hosts
b、集群
复制:对应的机器创建 /home/lgp yum -y install openssh-clients 修改对应 相应的myid 以及etc/hosts scp /home/lgp/zookeeper-3.4.6 192.168.1.81:/home/lgp //跨机器复制 启动服务: service iptables stop:分别关闭对应机器的 iptables cd /home/lgp/zookeeper-3.4.6/bin ./bin/zkServer.sh start :开启zookeeper ./bin/zkServer.sh status :状态查询 ./bin/zkServer.sh stop :关闭zookeeper 复制代码
三、整合zookeeper
cd /usr/local/tomcat/webapp/ROOT/WEB-INF vi dubbo.properties pwd:/usr/local/apache-tomcat-7.0.61/webapps/ROOT/WEB-INF dubbo.properties
四、Dubbo项目整合SpringMVC
1.maven配置
<!--使用maven包:dubbo所需jar包:dubbo、zookeeper、zkclient --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <!-- Zookeeper 用于分布式服务管理 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.3</version> </dependency>
2、eclipse配置dubbo.xsd,解决标签不识别的问题
百度云盘:https://pan.baidu.com/s/1nuIKgMd
路径:http://code.alibabatech.com/schema/dubbo/dubbo.xsd
3、在.properties配置zookeeper的注册地址
dubbo.registry.address=192.168.1.72:2181,192.168.1.73:2182,192.168.1.74:2183
4、service提供服务:spring-dubbo-provider.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 添加 DUBBO SCHEMA --> <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="dubbodemo-provider"/> <!-- 连接到哪个本地注册中心 --> <dubbo:registry protocol="zookeeper" address="10.77.55.161:2181"/> <!-- 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 --> <dubbo:protocol name="dubbo" server="netty" port="20882" serialization="hessian2" /> <!-- 监控中心配置,protocol="registry",表示从注册中心发现监控中心地址 <dubbo:monitor protocol="registry"/> --> <!-- 当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值 --> <dubbo:provider timeout="30000" threadpool="fixed" threads="100" accepts="1000" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service timeout="60000" interface="com.quicksure.insurance.service.InsuranceService" ref="insuranceService"/> <dubbo:service timeout="60000" interface="com.quicksure.insurance.service.MyAccountService" ref="myAccountService"/> <!-- 服务接口 <dubbo:service retries="0" interface="com.guduo.service.system.UserReportService" ref="userReportService" /> <dubbo:service retries="0" interface="com.guduo.service.system.UserSuggestionService" ref="userSuggestionService" /> --> </beans>
说明:address可以配置多个,若是zookeeper集群了,这里就应该配置多个zookeeper的地址
dubbo:protocol标签是用来配置服务提供方和服务适用方的网络协议的,详细:dubbo支持的常见协议
dubbo:service标签用来声明服务,timeout为超时时间
5、spring-context.xml引入spring-dubbo-provider.xml
6、在provider项目pom.xml中添加
<!-- 打包 --> <build> <finalName>quicksure_Server_Provider</finalName> <resources> <resource> <targetPath>${project.build.directory}/classes</targetPath> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <!-- mapper.xml打进相应的文件夹 --> <resource> <targetPath>${project.build.directory}/classes/com/quicksure/insurance/mapper</targetPath> <directory>src/main/java/com/quicksure/insurance/mapper</directory> <filtering>true</filtering> <includes> <include>**/*.xml</include> </includes> </resource> <!-- template.xml模板打进相应的文件夹 --> <resource> <targetPath>${project.build.directory}/classes/com/quicksure/insurance/velocity/template</targetPath> <directory>src/main/java/com/quicksure/insurance/velocity/template</directory> <filtering>true</filtering> <includes> <include>**/*.xml</include> </includes> </resource> <!-- 结合com.alibaba.dubbo.container.Main --> <resource> <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>spring.xml</include> </includes> </resource> </resources> <pluginManagement> <plugins> <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <classesDirectory>target/classes/</classesDirectory> <archive> <manifest> <mainClass>com.alibaba.dubbo.container.Main</mainClass> <!-- <mainClass>com.quicksure.test.util.Launcher</mainClass> --> <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 --> <useUniqueVersions>false</useUniqueVersions> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> </configuration> </plugin> <!-- 解决Maven插件在Eclipse内执行了一系列的生命周期引起冲突 --> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <versionRange>[2.0,)</versionRange> <goals> <goal>copy-dependencies</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> </build>
7、配置服务消费方的xxx-consumer.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 添加 DUBBO SCHEMA --> <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="dubbodemo-consumer"/> <!-- 连接到哪个注册中心(连接到本机的2181端口zookeeper) --> <dubbo:registry protocol="zookeeper" address="10.77.55.161:2181"/> <!-- 消费方用什么协议获取服务(用dubbo协议在20881端口暴露服务) --> <dubbo:protocol name="dubbo" port="20881" /> <!-- 提供哪些接口给消费者调用 --> <dubbo:reference id="insuranceService" timeout="60000" interface="com.quicksure.insurance.service.InsuranceService" url="dubbo://10.77.55.161:20881"/> <dubbo:reference id="myAccountService" timeout="60000" interface="com.quicksure.insurance.service.MyAccountService" url="dubbo://10.77.55.161:20881"/> </beans>
说明:这里address和提供方一样,不用过多阐述
dubbo:prorocol内的port与服务提供方端口一致就行了
dubbo:reference标签内的url,这个参数很重要,当一个团队有多个人在开发时,每个人都要把自己本机的服务注册到zookeeper上,若不加这个url参数的话,就会默认调一个服务,大家都会去调同一个服务,为防止这样的事情,加上url就好了,同一个zookeeper上port也不能重复,url配置模板:url=“dubbo://ip:服务端口”
8、将消费方的xxx-consumer.xml配置进消费方的spring.xml中
<!-- 加载dubbo的消费层xml配置文件 --> <import resource="spring-consumer.xml"/>
9、开发阶段启动dubbo服务,需要写一个主方法启动,但是如果打成jar包启动,dubbo会使用自己封装的启动方法去启动(也就可以将自己写的这个主方法删除了),这也是为什么会在pom.xml里面配置将spring.xml打包到classpath:spring/xxx.xml,这是dubbo封装的启动类指定路径(xxx.xml文件名没有要求)
dubbo项目打包可以参考:dubbo打包教程
public class Launcher { private static Log logger = LogFactory.getLog(Launcher.class); /** * @param args * 本地启动所需的主方法 */ public static void main(String[] args) { getLocalip(); logger.info("---****Provider 启动****-----"); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring.xml"); context.start(); System.out.println("Provider Server Started!"); try{ System.in.read(); } catch (Exception e) { e.printStackTrace(); } } }
五、dubbo项目部署
1、先将interface接口层打包成jar,直接打包到相应的maven本地库下
命令:mvn clean install
2、将provider服务提供项目打包成jar,然后将该项目所需的第三方依赖jar包手动copy到一个新建的lib文件夹(这个文件是在provider项目的pom.xml内指定了第三方jar包的获取路径),把provider项目jar包和lib文件夹放在同一目录下
启动:
a、若是本机上的话,cmd命令:Java -jar xxx.jar
b、Linux下,命令:nohup java -jar xxx.jar & (这是可在后台执行的,即使Ctrl+C也不会影响程序的后台运行)
3、将consumer项目打成war包,然后放在tomcat内启动就行了
Linux下命令:ps -ef | grep tomcat
kill -9 pid
./startup.sh
六、开发阶段,启动Dubbo服务
建议放在”src/test”目录下面
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * * @描述: 启动Dubbo服务用的MainClass. * @作者: 刘广平 * @创建时间: 2016-9-5,下午9:47:55 . * @版本: 1.0 . */ public class DubboProvider { private static final Log log = LogFactory.getLog(DubboProvider.class); public static void main(String[] args) { try { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring-context.xml"); context.start(); } catch (Exception e) { log.error("== DubboProvider context start error:",e); } synchronized (DubboProvider.class) { while (true) { try { DubboProvider.class.wait(); } catch (InterruptedException e) { log.error("== synchronized error:",e); } } } } }
jdk下载地址
tomcat下载地址
dubbo-admin-2.5.4.war下载地址
相关文章推荐
- Dubbo项目开发及部署的简单示例
- 区块链开源项目Ripple一、简单介绍与环境搭建,部署
- 区块链开源项目Ripple一、简单介绍与环境搭建,部署
- 基于maven+dubbo+spring+zookeeper的简单项目搭建
- 基于maven+dubbo+spring+zookeeper的简单项目搭建
- 一个简单的dubbo项目搭建案例
- 基于maven+dubbo+spring+zookeeper的简单项目搭建
- 将项目拆分搭建dubbo项目(二)dubbo项目搭建实例与应用
- Dubbo入门---搭建一个最简单的Demo框架
- 简单Spring MVC项目搭建
- 在Linux平台上搭建EasyDarwin,编译代码并简单部署
- 基于dubbo从传统MVC架构转向SOA架构分布式设计4--(服务部署集群搭建及负载均衡)
- 使用SpringBoot搭建小型项目,集成mybatis,redis,swagger2,并部署在外部容器中。
- springMVC框架的搭建最简单项目(没有数据库的配置)
- 搭建简单的Web API项目、Web API的调用方式
- 学习之路--项目整体框架简单的搭建
- Java web项目部署之SecureCRT+SecureFX的简单使用
- 三分钟搭建jad简单项目(包含权限、cms、oa)
- 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PHP环境的
- weblogic环境搭建以及war项目部署