欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

rocketMq实战(6)-1机多broker-bug追踪 博客分类: rocketmq  

程序员文章站 2024-03-17 19:33:58
...
目前的机器资源还是很紧张, 单个虚拟机上只部署一个broker有点浪费.希望能实现交叉部署,如图
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 
在配置文件 中配置好了 listenPort后
当一台虚拟机启动第二个 broker,报出如下异常
java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:125)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:498)
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1271)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:413)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:399)
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:1019)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:198)
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:349)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:358)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:374)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
at java.lang.Thread.run(Unknown Source)
 
怀疑是 HaListenPort 的影响,又配置了HaListenPort
再次执行 报出相同异常,没办法,只能debug源码 去追查
使用 eclispe 本地debug broker源码,请参照 本系列文章 rocketMq实战(5)-本地调试broker源码
先加载 broker-c配置文件,再加载broker-d配置文件
broker-c配置如下
brokerClusterName=DefaultCluster
brokerName=broker-c
brokerId=0
listenPort=10911
haListenPort=10912
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
broker-d 配置如下
brokerClusterName=DefaultCluster
brokerName=broker-d
brokerId=0
listenPort=10923
haListenPort=10924
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
开始追踪
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 
   AbstractBootstrap 是ServerBootstrap 的父类 ,此处执行 address赋值
   启动broker-d时,此处执行两次 第一次 port=23(明显是配置中的) 第二次 port=21(没有配置过啊)?
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 继续追踪localAddress
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
BrokerController-initialize()
有个默认的端口号bind 规则如下

rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 设置默认端口号
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 如果加载了配置文件 则获取配置文件中的端口号,到此 知道 bu*生的原因,如果两个 broker的listenPort配置 间隔小于2 则会出现上面的bug
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
HaListenPort 配置了也无效
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 broker-c,broker-d 占用情况端口号如下
rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
 综上所诉
HaListenPort配置上是无效的,规则:HaListenPort:nettyServerConfig.getListenPort() + 1
broker启动时有一个默认的端口号bind,规则如下
nettyServerConfig.getListenPort() - 2
由此可知 如果两个 broker的listenPort配置 间隔小于2 则会出现上面的bug.
最后我配置策略如下
broker-c: listentPort=11
broker-c: listentPort=23
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 17.8 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 40.9 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 52.8 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 26.9 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 85.9 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 7.9 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 39.5 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 40.1 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 62.7 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 22.1 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 39.5 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 6.1 KB
  • rocketMq实战(6)-1机多broker-bug追踪
            
    
    博客分类: rocketmq  
  • 大小: 17.8 KB