dubbo 钩子关闭

来源:互联网 发布:js监听函数是否执行 编辑:程序博客网 时间:2024/05/22 17:42

dubbo钩子关闭,
避免业务丢失

package com.test.task;import com.alibaba.dubbo.common.Constants;import com.alibaba.dubbo.common.extension.ExtensionLoader;import com.alibaba.dubbo.common.utils.ConfigUtils;import com.alibaba.dubbo.container.Container;import com.alibaba.dubbo.container.Main;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.List;public class TaskMain {    public static final String CONTAINER_KEY = "dubbo.container";    public static final String SHUTDOWN_HOOK_KEY = "dubbo.shutdown.hook";    private static final Logger logger = LogManager.getLogger(Main.class);    private static final ExtensionLoader<Container> loader = ExtensionLoader.getExtensionLoader(Container.class);    private static volatile boolean running = true;    public static void main(String[] args) {        try {            if ((args == null) || (args.length == 0)) {                String config = ConfigUtils.getProperty("dubbo.container", loader.getDefaultExtensionName());                args = Constants.COMMA_SPLIT_PATTERN.split(config);            }            final List<Container> containers = new ArrayList<Container>();            for (int i = 0; i < args.length; i++) {                containers.add(loader.getExtension(args[i]));            }            logger.info("Use container type(" + Arrays.toString(args) + ") to run dubbo serivce.");            if ("true".equals(System.getProperty("dubbo.shutdown.hook"))) {                Runtime.getRuntime().addShutdownHook(new Thread() {                    public void run() {                        for (Container container : containers) {                            try {                                container.stop();                                logger.info("Dubbo " + container.getClass().getSimpleName() + " stopped!");                            } catch (Throwable t) {                                logger.error(t.getMessage(), t);                            }                            synchronized (Main.class) {                                running = false;                                Main.class.notify();                            }                        }                    }                });            }            for (Container container : containers) {                container.start();                logger.info("Dubbo " + container.getClass().getSimpleName() + " started!");            }            logger.info(new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]").format(new Date()) + " Dubbo service server started!");        } catch (RuntimeException e) {            logger.error(e.getMessage(), e);            e.printStackTrace();            System.exit(1);        }        logger.info("============dubbo is starting==============");        synchronized (Main.class) {            while (running)                try {                    Main.class.wait();                } catch (Throwable localThrowable) {                }        }    }}
原创粉丝点击