zoukankan      html  css  js  c++  java
  • 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打包配置

    <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脚本

    #! /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文件的任意节点的内容

      

  • 相关阅读:
    简述对vuex的理解
    Vuex总结--是什么?有什么?怎么用?
    Vuex总结
    在vue中,methods和computed这两个方法的区别。
    关于vuex
    生命周期的钩子函数
    vuex 的理解
    Linux 安装kubectl
    python装饰器
    MySQL事务
  • 原文地址:https://www.cnblogs.com/xujishou/p/6480074.html
Copyright © 2011-2022 走看看