Dubbo项目重新部署端口被占用

dubbo服务的部署方式

  1. 独立应用启动,采用内置的netty服务器启动实例。
    只占用一个端口
  2. 容器启动,例如tomcat启动端口
    占用两个端口,一个tomcat端口,一个dubbo服务提供者端口

容器里启动的问题

在deploy的时候,dubbo提供者的端口是不会销毁的。只能重启tomcat才能释放端口。

解决办法

监听容器的销毁,将dubbo服务销毁了。

/**
 * Created by marker on 2017/8/21.
 */

/**
 * @author marker
 * @create 2017-08-21 下午2:04
 **/

import ch.qos.logback.core.net.server.ServerListener;
import com.alibaba.dubbo.registry.dubbo.DubboRegistry;
import com.alibaba.dubbo.registry.dubbo.DubboRegistryFactory;
import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
import com.llcloud.order.util.SpringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 *
 * 服务监听器
 *
 * @author marker
 * Created by marker on 2016/12/27.
 */
public class DubboServiceListener  implements ServletContextListener {
    /** 日志记录 */
    private Logger logger = LoggerFactory.getLogger(DubboServiceListener.class);

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("初始化");
    }



    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        logger.info("销毁dubbo实例中....");
        DubboRegistryFactory.destroyAll();
        DubboProtocol.getDubboProtocol().destroy();
        logger.info("销毁dubbo服务完成!");
    }
}

web.xml配置

    <listener>
        <listener-class>com.llcloud.listener.ServerListener</listener-class>
    </listener>
来源: 雨林博客(www.yl-blog.com)