`
chenchangqun
  • 浏览: 54116 次
  • 性别: 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.1.jar

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

    rocketmq监控 rocketmq-console-SNAPSHOT-1.0

    rocketmq监控 查看rocketmq.namesrv对应下的broker、topic、consuemr/producer等

    rocketmq-all-4.7.1-bin-release.zip

    RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息...

    JAVA-ACE-架构师系列视频教程在线观看地址- RocketMQ(订单实战上下全集)

    JAVA-ACE-架构师系列视频教程RocketMQ订单实战上目录介绍: 1001_RocketMQ_简介 2002_RocketMQ_核心概念详解 3003_RocketMQ_集群构建模型详解(一) 4004_RocketMQ_集群构建模型详解(二) 5005_RocketMQ_双主模式...

    rocketmq教程两套

    007-007_RocketMQ_Broker配置文件详解 008-008_RocketMQ_helloworld示例讲解 009-009_RocketMQ_整体架构概述详解 010-010_RocketMQ_Producer_API详解 011-011_RocketMQ_Producer_顺序消费机制详解 012-012_RocketMQ_...

    RocketMq学习视频

    007-007_RocketMQ_Broker配置文件详解 008-008_RocketMQ_helloworld示例讲解 009-009_RocketMQ_整体架构概述详解 010-010_RocketMQ_Producer_API详解 011-011_RocketMQ_Producer_顺序消费机制详解 012-012_RocketMQ_...

    rocketmq-4.7.1-.el7.x86_64.rpm

    vim /opt/rocketmq-4.7.1/conf/broker.conf - 启动(顺序) systemctl start mqnamesrv systemctl start mqbroker --查看状态 systemctl status mqnamesrv systemctl status mqbroker --停止(顺序) systemctl ...

    2017年最新JAVA-ACE-架构师系列视频课程- RocketMQ(上下集)

    7007_RocketMQ_Broker配置文件详解20:38 8008_RocketMQ_helloworld示例讲解34:29 9009_RocketMQ_整体架构概述详解15:36 10010_RocketMQ_Producer_API详解24:49 11011_RocketMQ_Producer_顺序消费机制详解24:37 12012...

    docker-compose一键部署rocketmq

    注意 如果你的微服务或者项目在开发的时候没有放入docker中或者与rocketmq容器不能直接用IP访问, 那么请把broker.conf中的 #brokerIP1=192.168.0.253 前面#号去掉,并且把后面的IP地址改成你的rocketmq容器宿主机IP...

    集成seata 分布式事务配置、sentienl 限流、熔断、降级、gateway 网关、jwt 、rocketmq

    检查是否成功:jps -1 验证是否正常: 启动消费者(先后输入):set NAMESRV_ADDR=192.168.1.144:9876 tools.cmd org.apache.rocketmq.example.quickstart.Consumer 启动生产者(先后输入):set NAMESRV_

    rocketmq-all-4.3.2-my.tar.gz

    RocketMQ部署实战集成包,内含两个一键启动/停止脚本,start-all.sh和stop-all.sh;【./start-all.sh】一键启动mqnamesrv、mqbroker、mq-console。 【./stop-all.sh】一键停止mqnamesrv、mqbroker、mq-console。

    rocketmq-console-ng

    rocketmq控制台 安装文档 http://blog.csdn.net/liu_zhaoming/article/details/77837881 [-] 安装环境 安装 编译克隆 配置jvm内存 配置启动mqnamesrv 配置启动broker 关闭服务器 配置windows控制台github 创建bat...

    RocketMQ-Broker镜像制作

    制作RocketMQ-Broker镜像需要的材料,制作方法见https://blog.csdn.net/wenyichuan/article/details/110541706

    rocketmq管理界面

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

    Byron4j#CookBook#9999-RocketMQ配置参数大全-持续收录1

    9999-RocketMQ配置参数大全-持续收录Broker配置参数收录所属集群名字附加:如果有多个master,那么每个master配置的名字应该一样,要不然

    【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置

    【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置.pdf【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置.pdf

    RocketMQ-3.5.8 源码安装版

    nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties >broker.out 2>&1 & nohup sh mqbroker -c ../conf/2m-noslave/broker-b.properties >broker.out 2>&1 & 5. 停止 sh mqshutdown broker;sh ...

    java8源码-rocketmq-docker:RocketMQDocker

    java8 源码 Apache RocketMQ Docker Apache RocketMQ Docker module ...修改rocketmq/distribution/conf/broker.conf 添加 listenPort = 10911配置【重要】 # 如果需要可以事先修改jvm参数配置,因为默

    doris-1.1.3源码编译broker-maven依赖包repository

    doris-1.1.3源码编译broker-maven依赖包repository

    rocketmq-console.zip

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

Global site tag (gtag.js) - Google Analytics