You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ehcache RMI复制配置中remoteObjectPort的作用是什么

Ehcache RMI复制配置理解校验及remoteObjectPort参数说明

现有运行逻辑理解校验

你的3点理解中,第2、3点表述正确,第1点存在偏差:

  • 节点启动后40001端口是本地RMI注册中心的监听端口,并非所有Ehcache RMI相关服务都运行在这个端口上。
  • 手动发现(peerDiscovery=manual)模式下,节点启动时会直接加载拼接完成的rmiUrls列表作为集群对等节点地址,不会通过组播做自动节点发现。
  • 节点启动后会注册缓存事件监听器,一方面捕获本地缓存的增删改事件同步给其他对等节点,另一方面接收其他节点发来的同步请求更新本地缓存,完成跨节点数据复制。

项目中peerProviderConfig的实现逻辑就是拼接所有对等节点的RMI访问地址,对应代码如下:

FactoryConfiguration peerProviderConfig = new FactoryConfiguration();
peerProviderConfig.setClass(RMICacheManagerPeerProviderFactory.class
                .getName());

for (CacheHost remoteHost : remoteHosts) {
     // 拼接RMI访问地址
     rmiUrls += separator
     createRmiUrl(remoteHost, cacheName);
     separator = "|";
 }

  // 写入配置
  peerProviderConfig.setProperties("peerDiscovery=manual, rmiUrls=" + rmiUrls);

其中createRmiUrl()返回的//<hostname>:<hostport>/cacheName格式地址里的hostport,就是对应节点RMI注册中心的监听端口,也就是统一配置的40001。

remoteObjectPort参数的具体用途

项目中Peer监听器的配置代码如下:

String peerListenerProps = "port=" + rmiPort;
peerListenerProps += ", remoteObjectPort=40002";
peerListenerProps += ", socketTimeoutMillis=" + socketTimeoutMillis;

FactoryConfiguration peerListenerConfig = new FactoryConfiguration();
peerListenerConfig.setClass(RMICacheManagerPeerListenerFactory.class.getName());
peerListenerConfig.setProperties(peerListenerProps);

配置中两个端口参数的分工明确:

  • port(取值40001):节点本地RMI注册中心的监听端口,其他节点首次连接当前节点时,首先访问这个端口查询缓存远程服务的存根信息。
  • remoteObjectPort(取值40002):真正处理缓存复制请求的远程服务对象实际绑定的端口。如果不手动指定这个参数,标准RMI机制会随机选择一个空闲端口绑定远程服务对象,在配置了防火墙的生产环境中,随机端口未被放行会直接导致跨节点复制失败。项目中把这个值固定为40002,就是为了规避随机端口带来的连通性问题,方便运维侧配置固定端口的防火墙放行规则。

补充提示:单台主机部署多个Ehcache节点时,需要保证每个节点的port和remoteObjectPort全局唯一,否则会触发端口绑定错误。

内容的提问来源于stack exchange,提问作者theimpatientcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:54:37