dubbo 应用 笔记-------暴露端口占用

dubbo暴露服务端口问题

情景:

多个web项目 

Web项目:A

Web项目:B

dubbo接口服务项目:C

A B都引用了C

现在在同一台服务器上(同IP,不同自然没影响)启动两个tomcatAtomcatB 来分别运行AB

问题:会报端口被占用

因为tomcatA先占用了dubbo服务C暴露需要的20880端口,

那么B也需要这个端口去暴露C服务,这时候就端口自然报被占用了

 

解决方法:

在启动服务时,动态分配 暴露端口

 

1.       数据库端表存储几个可用端口

2.       程序获取本机IP 根据IP 查出可用端口

3.       服务启动时动态获取IP 配置如下

<bean id="dynamicDubboPortReaderDao" class="com.test.dubbo.config.dubbo.DynamicDubboPortReaderImpl" init-method="init" />

public class DynamicDubboPortReaderImpl implements DynamicDubboPortReader,ApplicationContextAware{

    private ConfigurableApplicationContext applicationContext = null;

    private static final String PROTOCOL_NAME="dubbo";

    private static int RPOTOCOL_PORT=20880;

    @Autowired

    private IComputePortService computePortService;//获取端口服务

     /*初始化方法*/ 

    public void init(){

        RPOTOCOL_PORT = computePortService.getAddressPort();

        updateProtocolMessage(PROTOCOL_NAME,RPOTOCOL_PORT);

    } 

    @Override

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

        this.applicationContext = (ConfigurableApplicationContext)applicationContext;

    }

   

    @Override

    public void updateProtocolMessage(String protocolConfig,int port) {

        //判断初始化

        if(!applicationContext.containsBean(protocolConfig)){

            System.out.println("没有【"+protocolConfig+"】协议");

        }

        //获取协议

      ProtocolConfig protocolConfigSource=(ProtocolConfig) applicationContext.getBean(protocolConfig);

       //修改协议暴露端口信息

        protocolConfigSource.setPort(port);

    }

}

你可能感兴趣的:(DUBBO,占用,暴露端口)