dubbo如何平滑重启

一 背景:

业务server对外提供dubbo接口,每次升级重启部署都不平滑,因为停止脚本是stop.sh包含了kill -9,所以就是直接报错了。

二参照公司wiki:

1升级jar:

com.purpleframework.dubbox dubbox-core 2.0

原来是dubbox,现在升级为公司自有dubbo版本:

升级daojia自有dubbo版本3.0.2-SNAPSHOT或以上

com.daojia.dubbo dubbo 3.0.2-SNAPSHOT

2.增加jar:

com.daojia.dubbo-plus dubbo-plus-core 1.0.1-SNAPSHOT com.daojia.dubbo-plus dubbo-plus-monitor 1.0.1-SNAPSHOT

直接在web.xml替换spring的

org.springframework.web.context.ContextLoaderListener为

com.daojia.dubbo.plus.core.DubboSpringContainerListener

其他方式的使用spring集成dubbo的项目,请确保在spring容器关闭之前主动调用

ProtocolConfig.destroyAll();

3. 替换停止脚本

由于dubbo的优雅停机的超时时间为10秒,所以检查tomcat服务在指定waitTime 应大于这个dubbo的timeout时间,使得dubbo能够有机会执行关闭,

目前这边的配置tomcat超时kill -9 的waitTime为15秒。另外在提供方发布的时候建议折半发布,这样可以保证消费可以重试别的provider

注意:如果在provider停服的过程中出现如下异常,且先check消费方是否请求正常,如正常请忽略本次异常

com.alibaba.dubbo.remoting.RemotingException: Failed to send message Response

stop.sh脚本如下:

#!/bin/sh
TOMCAT_HOME=/opt/soft/tomcat
echo $(cd "$(dirname $0)"; pwd)
CATALINA_BASE=$(cd "$(dirname $0)"; pwd)
CATALINA_PID=$CATALINA_BASE/tomcat.pid

JAVA_HOME=/opt/soft/java
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin

export TOMCAT_HOME CATALINA_BASE CATALINA_PID JAVA_HOME CLASSPATH PATH JAVA_OPTS WF_USPCLUSTER

proj_dir=`basename $CATALINA_BASE`

/opt/soft/tomcat/bin/catalina.sh stop
sleep 5

if [[ -n "$proj_dir" ]]
then
        for i in {1..15}; do
        ps aux | grep "$proj_dir/t" | grep -v "grep" | grep -v "$CATALINA_BASE/(start.sh|stop.sh|restart.sh|logs/catalina.out)" > /dev/null
        status=$?
        if [[ $status -eq 0 ]]
        then
                echo "kill it" 
                ps aux |grep  "$proj_dir/t" | grep -v "release_version" | grep "$proj_dir/t" | grep -v "grep" | grep -v "$CATALINA_BASE/(start.sh|stop.sh|restart.sh|logs/catalina.out)" |  awk '{print $2}' | xargs -i kill {}
                > $CATALINA_PID
		sleep 1
        fi
	done;
else
        ps aux |grep  "$proj_dir/t" | grep -v "release_version" | grep "$proj_dir/t" | grep -v "grep" | grep -v "$CATALINA_BASE/(start.sh|stop.sh|restart.sh|logs/catalina.out)" |  awk '{print $2}' | xargs -i kill -9 {}
        echo "stop failt!!! kill -9"
        exit 1
fi

4其他问题:

No such extension monitorx for filter/com.alibaba.dubbo.rpc.Filter

PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'filter' threw exception; nested exception is java.lang.IllegalStateException: No such extension monitorx for filter/com.alibaba.dubbo.rpc.Filter

这个问题是配置文件,

网上有需要filter的,就在配置文件增加,我们现在的监控都集中了,所以一切的filter就去了。

把spring-dubbo.xml去掉:

<dubbo:consumer filter=“monitorx”/>

<dubbo:provider filter=“monitorx”/>

OK,启动正常了。

总结:

就是两块,一是服务能安全停止,而是期间不再分配新请求。

所以类似于nginx,平滑部署时,先去掉nginx请求连接,再停服务,等服务起来了,再挂上nginx连接。

猜你喜欢

转载自blog.csdn.net/m0_67401228/article/details/126328123
今日推荐