目前的机器资源还是很紧张, 单个虚拟机上只部署一个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
相关推荐
1. **集群管理**:可以查看RocketMQ集群的节点状态,包括NameServer和Broker的信息。 2. **主题与队列管理**:创建、删除和修改RocketMQ的主题(Topic)以及每个主题的队列(Queue)设置。 3. **消费组管理**:监控...
RocketMQ是阿里巴巴开源的一款分布式消息中间件,广泛应用于大规模分布式系统中的消息传递。"rocketmq-externals-master.zip"是一个包含RocketMQ源码的压缩包,对于深入理解RocketMQ的工作原理、性能优化以及进行二...
RocketMQ是中国阿里巴巴集团开源的一款高性能、高可用、稳定且易扩展的企业级消息中间件,它在分布式系统中扮演着至关重要的角色。RocketMQ的核心功能是实现应用程序之间的异步通信和数据交换,支持发布/订阅模式和...
1. **集群管理**:用户可以通过控制台查看RocketMQ集群的节点状态,包括NameServer、Broker等,便于了解集群的健康状况。 2. **主题与队列管理**:创建、删除和修改Topic,设置队列数量,以及进行权限控制。 3. **...
RocketMQ-Console是RocketMQ项目的扩展插件,是一个图形化管理控制台,提供Broker集群状态查看,Topic管理,Producer、Consumer状态展示,消息查询等常用功能,这个功能在安装好RocketMQ后需要额外单独安装、运行。...
RocketMQ,作为阿里巴巴开源的一款高性能、高可用、稳定可靠的消息中间件,已经在多个大型企业和项目中得到广泛应用。5.1.3版本的RocketMQ在前代基础上进行了诸多优化和改进,旨在提供更强大的消息处理能力和服务...
RocketMQ,作为阿里巴巴开源的一款高性能、高可用、稳定可靠的消息中间件,已经在众多企业和项目中得到广泛应用。RocketMQ的核心设计理念是提供低延迟、高吞吐量的分布式消息传输服务,支持大规模分布式系统的实时...
1. **消息队列**:RocketMQ提供基于主题(Topic)和队列(Queue)的消息模型,允许应用程序将消息发送到主题,然后由多个消费者从队列中拉取或订阅。这种模型支持一对多、一对一和广播等多种通信模式。 2. **高可用...
1. **Broker**:RocketMQ的核心组件,负责接收和存储消息。在启动Broker之前,需要修改`conf/broker.conf`配置文件,配置包括Broker的ID、端口号、存储路径等关键参数。 2. **NameServer**:NameServer是轻量级的...
4. **可扩展性**:RocketMQ采用水平扩展方式,通过增加更多的Broker节点来提高处理能力。它支持海量消息存储和处理,适用于大数据场景。 5. **消息顺序**:RocketMQ提供严格的消息顺序保证,通过指定消息的队列和...
1. **查看集群状态**: 查看各个Broker的在线状态、CPU和内存使用情况等。 2. **管理Topic**: 创建、删除、修改Topic,查看Topic的分区和副本信息。 3. **监控消息**: 监控消息的生产和消费情况,包括消费进度、延迟...
1. 高性能:RocketMQ基于发布/订阅模式设计,支持亿级消息并发,能够处理海量数据传输,满足高并发场景下的低延迟需求。 2. 高可用:RocketMQ提供了主从复制和分布式集群部署方案,确保在节点故障时能快速切换,...
6. 高性能:RocketMQ 使用异步处理和批量发送/接收,保证了在高并发环境下的性能。 7. 监控和管理:提供监控工具和管理控制台,便于查看系统状态、消息轨迹、性能指标等。 8. 多语言支持:RocketMQ 提供 Java、...
RocketMQ是阿里巴巴开源的一款分布式消息中间件,广泛应用于大规模分布式系统中的消息传递。4.8.0版本是其最新的稳定版本,提供了许多增强特性和优化。以下是对RocketMQ 4.8.0版本的一些关键知识点的详细说明: 1. ...
2. **conf目录**:包含配置文件,如`broker.conf`是Broker的配置文件,`namesrv.properties`是NameServer的配置文件,`remoting.properties`则涉及到RocketMQ内部网络通信的配置。 3. **lib目录**:包含了运行...
1. **Message Model**: RocketMQ支持两种消息模型——点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)。点对点模型中,每个消息只会被一个消费者消费,而发布/订阅模型则允许多消费者订阅同一个主题,...