关于ehcache使用rmi方式实现分布式缓存时遇到的问题

2023-10-26

业务场景: 一个架构较老的系统, 由于在正式环境中需要搭建集群环境。目前使用echcache来作为缓存,为了减少代码修改。使用了RMI方式来实现集群。

使用了被动发现和注册的方式,配置如下

<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
			properties="peerDiscovery=automatic,multicastGroupAddress=230.0.0.1, multicastGroupPort=1000, timeToLive=32" />
	<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
			properties="hostName=192.168.1.23,port=2005,socketTimeoutMillis=2000"/>

在开发的时候(操作系统:window),本机开了2个应用可以实现缓存共享。但是在两台开发机之间却不能,同理正式环境上的部署也出了问题。报错如下

Java RMI:rmi Connection refused to host: 127.0.0.1

debug看了下源码,在注册节点时确实是集群机器的ip,可是在发送请求的时候ip就变成了127.0.0.1(这也是为什么本地的2个应用可以实现缓存共享)。后来找了很久发现是Naming.lookup()方法中获取出来就成了127.0.0.1。找了很多文章都没知道问题。直接看到了一篇。里面介绍到

要在远程对象上调用方法,RMI客户端首先必须从RMI注册表中检索远程存根对象。 此存根对象包含服务器地址,该服务器地址稍后将在调用远程方法时用于连接到远程对象(与RMI注册表的连接和与远程对象的连接是两个完全不同的东西)。
 默认情况下,服务器将尝试检测自己的地址并将其传递给存根对象。 不幸的是,用于检测服务器地址的算法并不总是产生有用的结果(取决于网络配置)。

解决方法

通过设置RMI服务器上的系统属性java.rmi.server.hostname,可以覆盖传递给存根对象的服务器地址。

这可以用Java代码完成
System.setProperty("java.rmi.server.hostname", "<<rmi server ip>>");

或添加Java命令行参数:
-Djava.rmi.server.hostname=<<rmi server ip>>

在进行了以上配置后,问题解决了

参考文章:

https://blog.csdn.net/dnc8371/article/details/106704977

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于ehcache使用rmi方式实现分布式缓存时遇到的问题 的相关文章

随机推荐

  • 一种比较省内存的稀疏矩阵Python存储方案

    原文 http www pythontab com html 2014 pythonhexinbiancheng 0522 788 html 推荐系统中经常需要处理类似user id item id rating这样的数据 其实就是数学里面
  • js的数据交互

    JSP 几个内置对象 out request response session 一 application 1 介绍 application 他是代表的整个项目的全局对象 application 所有项目下面的页面共享 所有的浏览器用户 访
  • 【问题解决】VSCode ESLint 保存格式化时不生效

    问题描述 VSCode 中安装了 Prettier 和 ESLint 插件 在项目中使用了 eslintrc js 文件规范项目代码 但是保存代码时格式化并不是按该文件的配置而是按 Prettier 的配置 问题解决 修改 Settings
  • 力扣的题库突然打不开的解决办法

    问题 力扣的题目打开很慢 然后题目那是灰色 解决方案 换个浏览器 清楚浏览器缓存 如果上述方法都不可以 检查一下自己有没有安装 脚本 如果有的话可以停用他 在浏览器右上角 有管理扩展的地方 停用一下油猴这个扩展 我下面的是已经删除之后的图
  • batocera 完整包_Batocera Plus 可能是现如今最强最全最好用的模拟器集成系统!

    Btocera PLUS系统开机界面 相信玩Batocera的圈子里面Batocera Plus 绝对是青出于蓝而胜于蓝的超级强劲改版 我们来细说为什么Batocera Plus如何受众人爱戴 甚至超过了原版的Batocera 自batoc
  • libgcrypt-1.10.2编程-计算摘要

    文章目录 使用libgcrypt计算摘要 一 计算少量数据摘要 二 计算大量数据摘要 在main函数中调用 使用libgcrypt计算摘要 libgcrypt编程计算摘要的方式有2种 一种可用来计算小数据的摘要 如字符串 一种可用来计算大数
  • edl后变暗后的解决方法

    由于edl类似于ssao 会变暗 这时候调整亮度时 可以类似于hdr 高动态范围转LDR 只是不色调映射就可以了 rgb各分量同时提高同一个比例即可 这样既可以变亮且不溢出 也可以不改变颜色 当然 可能会出现类似于深绿变浅绿的现象 但是视觉
  • 基于CH552G主控的开源九键小键盘(资料齐全)

    Content 1 前言 2 CH55X Arduino平台环境搭建 2 1 常规安装 2 2 HFS挂载本地服务器安装 3 例程使用 3 1 工程下载及编译 3 2 程序烧录 1 前言 芯片选型 CH552G 本文主要解决Arduino下
  • JSZIP+StreamSaver下载大文件打包遇到的问题

    背景 公司项目为了节约服务器硬盘 需要从微信企业微盘下载大批量文件 然后 进行客户端打包 问题 根据StreamSaver的代码演示例子 是通过指定Blob类型进行流下载更新 我尝试了这个方法 发现一旦Blob类型大于1G的时候 Chrom
  • DC-DC与电感

    作者 AirCity 2020 2 16 Aircity007 sina com 本文所有权归作者Aircity所有 DC DC即直流 直流转换器 输入是直流电压 输出也是直流电压 DC DC有升压型boost 降压型buck和升降压型bu
  • 基于SSM的海外代购系统设计与实现

    摘 要 近年来 我国的互联网方面发展十分的迅速 短短20年 信息时代就已经展现在了我们的面前 电商 是信息时代中出现的一大产物 电商的发展在很大程度上来说的的确确的方便了我们日常的部分的生活购物行为 从1997年电商的萌芽开始发展直至今日
  • 类的公有类型(public)和私有类型(private)

    数据成员可以为公有 函数成员也可以为私有 如果数据成员为公有 那么在对象的作用域内的任何函数都可以通过对象名使用该数据成员 如果函数成员为公有 那么该函数成员只能被公有的函数通过对象名调用
  • python二元函数图像在线绘制_“绘图,让科学生动起来”:Python-matplotlib绘图(多元函数拟合-3D绘图专题)...

    作者简介 85后一名分析化学工作者及科学爱好者 深爱着北京的老北京人 爱好运动 科学 旅行 个人微信公众号 科学是什么东东 欢迎关注 搭建python matplotlib绘图平台的四个要素是什么 它们是 python软件主体 pip库管理
  • ReentrantLock 源码分析

    ReentrantLock简单使用demo如下 Lock lock new ReentrantLock lock lock try 业务逻辑 finally lock unlock 注 获取的锁代码要放到try块之外 防止获得锁代码异常 抛
  • Chrome开发者工具详解

    Chrome开发者工具详解 1 Elements Console Sources面板 Chrome开发者工具面板 面板上包含了Elements面板 Console面板 Sources面板 Network面板 Timeline面板 Profi
  • adb MacBook Pro上使用adb命令:Command not found或者每次使用前要source .bash_profile文件

    前言 adb MacBook Pro上使用adb命令报错 Command not found 或者每次使用前要source bash profile文件 一 解决问题1 在根路径配置 bash profile文件 如果没有 touch ba
  • python-面向对象基础-类属性&实例属性-构造&析构

    一 类的定义 class 类名 类体 class Person object pass 二 类中成员的定义 class Person object 属性 name tom age 18 height 180 方法 def eat self
  • C++堆和栈的区别和联系

    2017年09月16日 10 39 33 阅读数 1605 参考博客地址 http blog csdn net hairetz article details 4141043 http blog csdn net handsomesunsh
  • C#学习之ASP.NET概述

    ASP NET的应用 网络应用程序开发 学习ASP NET的优势 易学 设计人员和后台代码人员专注于自己的工作 原因 ASP NET将HTML页面代码和脚本代码分离 高效地创建大规模的网络应用程序 背景 自从互联网的出现 各种网络开发技术层
  • 关于ehcache使用rmi方式实现分布式缓存时遇到的问题

    业务场景 一个架构较老的系统 由于在正式环境中需要搭建集群环境 目前使用echcache来作为缓存 为了减少代码修改 使用了RMI方式来实现集群 使用了被动发现和注册的方式 配置如下