Dubbo项目重新部署端口被占用
dubbo服务的部署方式
- 独立应用启动,采用内置的netty服务器启动实例。
只占用一个端口 - 容器启动,例如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>