`
chenchangqun
  • 浏览: 55215 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

rocketMq实战(6)-1机多broker-bug追踪

 
阅读更多
目前的机器资源还是很紧张, 单个虚拟机上只部署一个broker有点浪费.希望能实现交叉部署,如图

 
在配置文件 中配置好了 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
开始追踪

 

 
   AbstractBootstrap 是ServerBootstrap 的父类 ,此处执行 address赋值
   启动broker-d时,此处执行两次 第一次 port=23(明显是配置中的) 第二次 port=21(没有配置过啊)?

 继续追踪localAddress

 
BrokerController-initialize()
有个默认的端口号bind 规则如下


 

 设置默认端口号

 如果加载了配置文件 则获取配置文件中的端口号,到此 知道 bug产生的原因,如果两个 broker的listenPort配置 间隔小于2 则会出现上面的bug
HaListenPort 配置了也无效

 broker-c,broker-d 占用情况端口号如下

 综上所诉
HaListenPort配置上是无效的,规则:HaListenPort:nettyServerConfig.getListenPort() + 1
broker启动时有一个默认的端口号bind,规则如下
nettyServerConfig.getListenPort() - 2
由此可知 如果两个 broker的listenPort配置 间隔小于2 则会出现上面的bug.
最后我配置策略如下
broker-c: listentPort=11
broker-c: listentPort=23
  • 大小: 17.8 KB
  • 大小: 40.9 KB
  • 大小: 52.8 KB
  • 大小: 26.9 KB
  • 大小: 85.9 KB
  • 大小: 7.9 KB
  • 大小: 39.5 KB
  • 大小: 40.1 KB
  • 大小: 62.7 KB
  • 大小: 22.1 KB
  • 大小: 39.5 KB
  • 大小: 6.1 KB
  • 大小: 17.8 KB
分享到:
评论

相关推荐

    rocketmq-console-ng-1.0.0.zip

    1. **集群管理**:可以查看RocketMQ集群的节点状态,包括NameServer和Broker的信息。 2. **主题与队列管理**:创建、删除和修改RocketMQ的主题(Topic)以及每个主题的队列(Queue)设置。 3. **消费组管理**:监控...

    rocketmq-externals-master.zip

    RocketMQ是阿里巴巴开源的一款分布式消息中间件,广泛应用于大规模分布式系统中的消息传递。"rocketmq-externals-master.zip"是一个包含RocketMQ源码的压缩包,对于深入理解RocketMQ的工作原理、性能优化以及进行二...

    rocketmq可视化控制台最新版 rocketmq-console-ng-2.x

    1. **集群管理**:用户可以通过控制台查看RocketMQ集群的节点状态,包括NameServer、Broker等,便于了解集群的健康状况。 2. **主题与队列管理**:创建、删除和修改Topic,设置队列数量,以及进行权限控制。 3. **...

    rocketmq-console-ng-1.0.1.jar

    RocketMQ-Console是RocketMQ项目的扩展插件,是一个图形化管理控制台,提供Broker集群状态查看,Topic管理,Producer、Consumer状态展示,消息查询等常用功能,这个功能在安装好RocketMQ后需要额外单独安装、运行。...

    rocketmq-all-5.1.1-bin-release.zip

    RocketMQ是中国阿里巴巴集团开源的一款高性能、高可用、稳定且易扩展的企业级消息中间件,它在分布式系统中扮演着至关重要的角色。RocketMQ的核心功能是实现应用程序之间的异步通信和数据交换,支持发布/订阅模式和...

    rocketmq-all-5.0.0-bin-release.zip

    RocketMQ,作为阿里巴巴开源的一款高性能、高可用、稳定可靠的消息中间件,已经在众多企业和项目中得到广泛应用。RocketMQ的核心设计理念是提供低延迟、高吞吐量的分布式消息传输服务,支持大规模分布式系统的实时...

    rocketmq-all-5.1.3-bin-release.zip

    RocketMQ,作为阿里巴巴开源的一款高性能、高可用、稳定可靠的消息中间件,已经在多个大型企业和项目中得到广泛应用。5.1.3版本的RocketMQ在前代基础上进行了诸多优化和改进,旨在提供更强大的消息处理能力和服务...

    rocketmq-all-5.1.4-bin-release.zip

    1. **消息队列**:RocketMQ提供基于主题(Topic)和队列(Queue)的消息模型,允许应用程序将消息发送到主题,然后由多个消费者从队列中拉取或订阅。这种模型支持一对多、一对一和广播等多种通信模式。 2. **高可用...

    rocketmq-all-4.9.4-bin-release

    1. **Broker**:RocketMQ的核心组件,负责接收和存储消息。在启动Broker之前,需要修改`conf/broker.conf`配置文件,配置包括Broker的ID、端口号、存储路径等关键参数。 2. **NameServer**:NameServer是轻量级的...

    rocketmq-all-4.9.3-bin-release

    4. **可扩展性**:RocketMQ采用水平扩展方式,通过增加更多的Broker节点来提高处理能力。它支持海量消息存储和处理,适用于大数据场景。 5. **消息顺序**:RocketMQ提供严格的消息顺序保证,通过指定消息的队列和...

    rocketmq-all-5.2.0-bin-release.7z

    1. 高性能:RocketMQ基于发布/订阅模式设计,支持亿级消息并发,能够处理海量数据传输,满足高并发场景下的低延迟需求。 2. 高可用:RocketMQ提供了主从复制和分布式集群部署方案,确保在节点故障时能快速切换,...

    rocketmq-all-4.6.0-bin-release.zip

    6. 高性能:RocketMQ 使用异步处理和批量发送/接收,保证了在高并发环境下的性能。 7. 监控和管理:提供监控工具和管理控制台,便于查看系统状态、消息轨迹、性能指标等。 8. 多语言支持:RocketMQ 提供 Java、...

    rocketmq-all-4.7.0-source-release.zip

    1. **Broker**:RocketMQ的核心组件,负责接收和分发消息。 Broker包含Master和Slave,Master处理发送请求,Slave用于数据备份,实现高可用。 2. **NameServer**:轻量级的注册中心,负责管理Broker集群的信息,...

    rocketmq-externals-master

    1. **查看集群状态**: 查看各个Broker的在线状态、CPU和内存使用情况等。 2. **管理Topic**: 创建、删除、修改Topic,查看Topic的分区和副本信息。 3. **监控消息**: 监控消息的生产和消费情况,包括消费进度、延迟...

    最新版 rocketmq-all-4.8.0-bin-release.zip

    RocketMQ是阿里巴巴开源的一款分布式消息中间件,广泛应用于大规模分布式系统中的消息传递。4.8.0版本是其最新的稳定版本,提供了许多增强特性和优化。以下是对RocketMQ 4.8.0版本的一些关键知识点的详细说明: 1. ...

    最新版windows rocketmq-all-4.7.0-bin-release.zip

    2. **conf目录**:包含配置文件,如`broker.conf`是Broker的配置文件,`namesrv.properties`是NameServer的配置文件,`remoting.properties`则涉及到RocketMQ内部网络通信的配置。 3. **lib目录**:包含了运行...

    rocketmq-all-4.0.0-incubating-bin-release

    1. **Message Model**: RocketMQ支持两种消息模型——点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)。点对点模型中,每个消息只会被一个消费者消费,而发布/订阅模型则允许多消费者订阅同一个主题,...

Global site tag (gtag.js) - Google Analytics