Dubbo的配置及启动,provider是以jar形势打包,脚本启动很大部分内容是借鉴了dubbo官方脚本


Tomcat+Dubbo安装

        1.tomcatwebapps目录下的所有文件清空,讲Dubbo管理控制台的程序dubbo-admin-2.5.3.war

webapps中,并且解压命名为ROOT。

unzip dubbo.war -d ROOT

        2.配置dubbo.properties

     将以下地址改为你Zookeeper注册的地址。前提:已经安装过Zookeeper。

                 dubbo.registry.address=zookeeper://192.168.137.128:2181

   3.启动tomcat

浏览:http://192.168.137.128:8080/出现以下界面

PS:JDK最好使用1.7版本,因为dubbo使用的Spring版为2.X 具体原因也说不清楚,我最早部署时也是使用JDK1.8 启动tomcat时报错

RROR context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uriBrokerService': Cannot create inner bean '(inner bean)' of type [com.alibaba.citrus.service.uribroker.impl.URIBrokerServiceImpl$URIBrokerInfo] while setting bean property 'brokers' with key [0]; nested excepti on is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#25': Cannot create inner bean 'server' of type [com.alibaba.citrus.service.uribroker.uri.GenericURIBroker] while setting constructor argument; nested exception is org.springframework.beans.fact ory.BeanCreationException: Error creating bean with name 'server': Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'URIType' of bean class [com.alibaba.citrus.service.uribroker.uri.GenericURIBroker]: Bean property 'URIType' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
解决方案可以参考:https://github.com/alibaba/dubbo/issues/50 

为了省事我是将JDK降到1.7 。

dubbo官网com.alibaba.dubbo.container.Main 启动服务配置

相应的配置已经配置好了,接下来介绍使用dubbo官网com.alibaba.dubbo.container.Main 启动服务实现优雅关机

pop.xml打包配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<build>
         <finalName>pay-service-bank</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>
             <resource>
                 <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>
                 <directory>src/main/resources/spring</directory>
                 <filtering> true </filtering>
                 <includes>
                     <include>spring-context.xml</include>
                 </includes>
             </resource>
         </resources>
         <pluginManagement>
             <plugins>
                 <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>
         <plugins>
             <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <configuration>
                     <classesDirectory>target/classes/</classesDirectory>
                     <archive>
                         <manifest>
                             <mainClass>com.alibaba.dubbo.container.Main</mainClass>
                             <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
                             <useUniqueVersions> false </useUniqueVersions>
                             <addClasspath> true </addClasspath>
                             <classpathPrefix>lib/</classpathPrefix>
                         </manifest>
                         <manifestEntries>
                             <Class-Path>.</Class-Path>
                         </manifestEntries>
                     </archive>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
                 <executions>
                     <execution>
                         <id>copy-dependencies</id>
                         <phase> package </phase>
                         <goals>
                             <goal>copy-dependencies</goal>
                         </goals>
                         <configuration>
                             <type>jar</type>
                             <includeTypes>jar</includeTypes>
                             <outputDirectory>
                                 ${project.build.directory}/lib
                             </outputDirectory>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>

 ps :spring-context.xml文件中对其他xml的引入地址要写成:

<import resource="classpath:spring/spring-mybatis.xml" />
<import resource="classpath:spring/applicationContext.xml" />

原因是我们在打包配置时将spring-context.xml文件复制到META-INF/spring下,如果还是使用相对地址配置就出错了找不到文件

OK打包部署。

自定义Dubbo服务端维护的shell脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#! /bin/bash
usage(){
 
    echo  "----------USAGE:--------------------"
    echo  "provider  start"
    echo  "provider  stop"
    echo  "provider  start  xx"
    echo  "provider  stop   xx"
    echo  "-------------------------------------"
}
 
stopAll(){
 
     procids=`ps -fe|grep jar |grep -v grep |grep -v tomcat| awk  '{print $2}' `
     if  [ -z  "$procids"  ]; then
         echo  tip:  no process  found
     else
         for  procid  in  $procids
           do
                kill $procid
           done
     fi
}
 
startAll(){
     echo  '....'
     jars=`ls *.jar`
     if  [ -z  "$jars"  ]; then
         echo top:  no jar found,please check  if  you are  in  correct directory...
     else
         for  jarName  in  $jars
         do
             #logName=`echo ${jarName/jar/log}`
             logName= 'all.log'
             nohup java $JAVA_OPTS -jar $jarName >>$logName 2>1 &
         done
     fi;
}
 
cmd=$1
module=$2
 
JAVA_OPTS= "-server -Xms4096m  -Xmx4096m  -verbose:gc  -XX:+PrintGCDetails  -XX:PermSize=256M -XX:MaxPermSize=512m"
 
 
if  [ $ # -gt 2 ] || [ $# -lt 1 ];  then
    usage;
elif [ $cmd !=  'start'  ] &&  [ $cmd !=  'stop'  ]; then
    usage;
else
    case  $cmd   in
           'start' )
                                 if  [ $ #  -eq 1 ] ; then
                                        echo start all provider ............
                                        procids=`ps -fe|grep jar |grep -v grep |grep -v tomcat| awk  '{print $2}' `
                                        if  [ -z  "$procids"  ]; then
                                              echo  ''   
                                        else
                                               stopAll
                                        fi;
                                        startAll
                                 else
                                        echo start $module  ........
                                        echo
                                        if  [ -n $module ".jar"  ];  then
                                                 procid=`ps -fe|grep $module ".jar"  |grep -v grep | awk  '{print $2}' `
                                                 echo $procid
                                                 if  [ -z  "$procid"  ]; then
                                                     #nohup java -jar $module".jar" >$module".log" &
                                                     nohup java $JAVA_OPTS -jar $module ".jar"  >>all.log 2>1 &
                                                 else
                                                     echo  tip:     $module ".jar"   has started already.  don not  start again!
                                                 fi
                                        else
                                                 echo $module ".jar not exists"
                                        fi
                                        echo
                                 fi
                                 ;;
            'stop' )
                                 if  [ $ #  -eq 1 ] ; then
                                        echo stop all provider ............
                                        stopAll
                                 else
                                        echo stop  $module  ........
                                        echo
                                        procid=`ps -fe|grep $module ".jar"  |grep -v grep | awk  '{print $2}' `
                                        if  [ -z  "$procid"  ]; then
                                                 echo   tip:   java $module ".jar"   process not exists;
                                        else
                                                 kill $procid
                                        fi
                                        echo
                                 fi
                                 ;;
    esac
fi

  

ps:Dubbo是通过JDK的ShutdownHook来完成优雅停机的,所以如果用户使用"kill -9 PID"等强制关闭指令,是不会执行优雅停机的,只有通过"kill PID"时,才会执行。

Maven内置变量说明: 

  • ${basedir} 项目根目录
  • ${project.build.directory} 构建目录,缺省为target
  • ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
  • ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
  • ${project.packaging} 打包类型,缺省为jar
  • ${project.xxx} 当前pom文件的任意节点的内容

猜你喜欢

转载自blog.csdn.net/zbajie001/article/details/79907383