在HSF框架中如何解决RpcContext.getContext().getRemoteAddress()返回空的问题?

在HSF框架中如何解决RpcContext.getContext().getRemoteAddress()返回空的问题?

HSF框架下获取调用方IP地址的有效方法

在使用HSF框架提供服务时,直接使用RpcContext.getContext().getRemoteAddress()获取调用方IP地址经常返回空值。这是因为HSF框架在服务提供方默认不记录调用方IP。本文将提供解决此问题的有效方案。

问题分析:

提供的代码片段展示了服务提供方尝试使用RpcContext.getContext().getRemoteAddress()获取IP,但结果为空。RpcContext类来自edas-sdk-1.8.3.jar,其getRemoteAddress()方法返回InetSocketAddress对象,在服务提供方通常未被自动填充。

解决方案:通过自定义Attachment传递IP地址

最可靠的方案是通过HSF框架的Attachment机制在调用方设置IP地址,然后在服务提供方获取。

服务提供方代码 (YwcxServiceImpl):

  1. @Slf4j@HsfProvider(serviceInterface = YwcxService.class, serviceVersion = "1.0.0")public class YwcxServiceImpl implements YwcxService { @Override public String inster(List ywcxquerylist) { String remoteIp = RpcContext.getContext().getAttachment("remoteIp"); log.info("Remote IP: {}", remoteIp); // 业务逻辑... return "success"; // or other return value }}

登录后复制

服务调用方代码 (服务B):

  1. @Scheduled(cron = "${task.cron.runTaskHuayu}")public String dsrw() { // 获取调用方IP地址 (需要根据实际情况替换获取IP的方法) String callerIp = getCallerIpAddress(); RpcContext.getContext().setAttachment("remoteIp", callerIp); return ywcxService.inster(fqxcsqquerylist);}// 获取调用方IP地址的方法,需要根据实际环境实现private String getCallerIpAddress() { // 例如,使用HttpServletRequest获取IP // 或者使用其他方法获取本机IP // 这里需要根据你的具体应用场景来实现 return "127.0.0.1"; // 替换为实际获取IP地址的代码}

登录后复制

关键改进:

明确使用Attachment: 服务调用方使用RpcContext.getContext().setAttachment(“remoteIp”, callerIp);将调用方IP地址作为Attachment添加到上下文。获取Attachment: 服务提供方使用RpcContext.getContext().getAttachment(“remoteIp”);从上下文获取附加的IP地址。获取调用方IP地址的实现: getCallerIpAddress()方法需要根据实际应用场景实现,例如,在Web应用中,可以使用HttpServletRequest对象获取客户端IP地址;在其他环境中,可能需要使用不同的方法获取本机IP地址。

通过这种方法,即使RpcContext.getContext().getRemoteAddress()返回空,也能可靠地获取调用方的IP地址。 记住替换getCallerIpAddress()方法中的占位符代码为实际获取IP的逻辑。

以上就是在HSF框架中如何解决RpcContext.getContext().getRemoteAddress()返回空的问题?的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

点点赞赏,手留余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    编程技术

    使用TKMyBatis进行数据库查询时,如何优雅地获取实体类变量名构建查询条件?

    2025-4-2 14:15:40

    编程技术

    IDEA控制台日志打印空格问题如何解决?

    2025-4-2 14:15:50

    0 条回复 A文章作者 M管理员
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索