关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException

2023-11-10

关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException和使用localhost:8081报异常java.lang.IllegalStateException: No instances available for localhost问题

1.关于java.lang.IllegalStateException: No instances available for localhost问题

在Springcloud使用RestTemplate访问其他模块的时候,可能会出现java.lang.IllegalStateException: No instances available for localhost问题。也有时候回出现空指针的问题。对于这类Bug解决的方法可能是由于你的restTemplate配置的问题。这些问题发生在访问的模块,被访问的模块这里就不用写出来了。

首先是启动类和restTemplate配置。这里需要注意的是,如果restTemplate对象是用纯地址访问的话,就不需要@LoadBalanced这个标签,如果

@SpringBootApplication
@EnableEurekaClient
public class RibbonApplication {

    @Bean
    //@LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(RibbonApplication.class,args);
    }
}

然后就是controller层通过restTemplate对象访问其他模块接口的方法

	@RestController
	public class UserController {
	
    @Autowired
    private RestTemplate restTemplate;
    /***
     *      通过ribbon和template对象访问 user里面的数据
     */
    @GetMapping("/movie/{id}")
    public User findById(@PathVariable Long id) {
        System.err.println("consumer---------------------"+id);
        return this.restTemplate.getForObject("http://localhost:7900/simple/"+ id, User.class);
    }
}

值得注意的是,如果你不注释 //@LoadBalanced这个标签的话,就会报出一下错误:java.lang.IllegalStateException: No instances available for localhost。所以解决这种异常的方法是注释掉@LoadBalanced这个标签

2.关于Springcloud的RestTemplate不能使用服务名java.net.UnknownHostException: micorservice-provider-user

如果restTemplate对象需要使用服务名的话会报异常:java.net.UnknownHostException: micorservice-provider-user。 micorservice-provider-user是其他模块的服务名
服务名:在这里插入图片描述

启动类代码

@SpringBootApplication
@EnableEurekaClient
public class RibbonApplication {

    @Bean
   @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {

        SpringApplication.run(RibbonApplication.class,args);
    }
}

访问其他模块的接口的代码

@RestController
public class UserController {

    @Autowired
    private RestTemplate restTemplate;
    
    /***
     *      通过ribbon和template对象访问 user里面的数据
     */
    @GetMapping("/movie/{id}")
    public User findById(@PathVariable Long id) {
        System.err.println("consumer---------------------"+id);
        
        //这里使用的micorservice-provider-user是其他模块的服务名
        
        return this.restTemplate.getForObject("http://micorservice-provider-user/simple/"+ id, User.class);
    }
}

解决这类异常的方法是在resttemplate配置 @LoadBalanced这个注解

3.总结

如果需要使用ip和端口,就不需要加 @LoadBalanced注解,如果需要使用应用名访问,那就需要在restTemplate配置加上 @LoadBalanced注解 。因为@LoadBalanced这个注解是负载均衡的注解,而负载均衡就是通过访问服务名而实现的。如果你加上这个注解之后使用restTemplate,那么他就默认你的localhost一个模块的服务名称(ip+端口),而不是本机的ip。总而言之,如果需要使用ip和端口,就不需要加 @LoadBalanced注解,如果需要使用应用名访问,那就需要在restTemplate配置加上 @LoadBalanced注解

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

关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException 的相关文章

随机推荐

  • VScode连接服务器运行代码

    我的pycharm到期了 只能用VScode了 说一下怎么用VScode连接服务器 安装Remote SSH插件 设置 搜ssh 把这个打上对勾 这里建立新的连接 会让你输入 你需要输入username 地址 端口 输入完之后打开这个con
  • JS 判断当前浏览器是谷歌Google、火狐Firefox、Safari、Edge、Opera还是其他浏览器的方法

    JS 判断当前浏览器是谷歌Google 火狐Firefox Safari Edge还是其他浏览器的方法 如下 第一种 function detectBrowser const userAgent navigator userAgent if
  • Linux操作系统之C语言实现shell命令解释器项目

    文章目录 一 实现原理 二 具体实现过程 一 实现原理 普通命令 ls pwd cp clear 通过exec fork 内置命令 cd exit bash本身提供方法 调用自己的函数 不会产生子进程 二 具体实现过程 1 mybash项目
  • mockito

    mock 对接口返回值进行模拟数据 使用场景 1 协同开发的时候 需要调用未开发接口 模拟接口返回值数据 2 接口联调 网络不通的时候 把线上数据拷贝回来 模拟数据 添加mockito依赖
  • java用lambda函数排序,Java函数式编程-4.lambda表达式排序

    1 lambda表达式排序 咱们首先看几个比较常见的排序例子 基本数据类型的排序ide List list Arrays asList 1 3 2 5 4 list sort Comparator naturalOrder System o
  • cartographer更新地图-移除未完成的子图

    首先说明为什么要移除未完成的子图 因为如果不删除 每次更新都会保留以前未完成的子图 那时间累计数据量不断增长 不得了 overlapping submaps trimmer移除的只有已经完成的子图 那对于未完成的子图如何处理呢 首先在ove
  • tq210基本参数

    这个板子的核心板为core B 底板为tq210 board v4 1G ddr2 128Mx8pcs 1G slc flash K9K8G08 PMU TPS659101 使用系统自带的sd uboot 使用板子带的串口线 这个线与ok2
  • win10如何修改windows默认远程桌面端口号

    修改默认端口需要修改注册表 打开开始运行 输入regedit 进入注册编辑器 依次点击进入 HKEY LOCAL MACHINE SYSTEM CurrentContro1Set 接着找到 以下路径Control Tenninal Serv
  • NAT穿透 - P2P

    NAT穿透 P2P 一 NAT穿透 二 NAT分类 总结 一 NAT穿透 NAT穿透 即内网穿透 也称为打洞 其网络拓扑示例 二 NAT分类 完全锥型NAT 内网客户端映射到一个外部IP Port IP端口无限制 任意主机都可往该映射端口发
  • 逻辑分析题目:“给你一个9升的水桶和一个4升的水桶,在河里取6升水”

    问题答案 1 大桶装满 然后倒满小桶 这样大桶剩5升 小桶4升 2 小桶倒空 大桶再往小桶灌满 大桶剩1升 小桶4升 3 小桶倒空 把大桶的一升灌进小桶 这时大桶没有了 小桶一升 4 再灌满大桶 此时往已有1升得小桶里灌三升 大桶剩下6升
  • 算法训练Day38

    目录 动态规划理论基础 LeetCode509 斐波那契数 1 思路 2 代码实现 3 复杂度分析 4 总结与收获 LeetCode70 爬楼梯 1 思路 2 代码实现 3 复杂度分析 4 思考与收获 LeetCode746 使用最小花费爬
  • input/textarea文本的选择与获取

    获取input textarea中选择的文本function getSelectedText textbox if document selection IE return document selection createRange te
  • 网络与信息安全——知识整理(1)

    1 The Security Goals a Confidentiality to protect theconfidential information and to guard against the malicious actions
  • 数据结构——算法

    算法是什么 算法 Algorithm 是对解题方案的准确而完整的描述 是一系列解决问题的清晰指令 说白了就是 用来解决问题的 算法的特性 必须全部符合才可称之为一个算法 1 有穷性 一个算法必须在执行有穷步后结束且每一步必须在有穷时间内完成
  • Unity项目架构

    整理了一下Unity项目客户端涵盖一些内容 如果有遗漏 欢迎大家指出 感谢
  • 动画 + 大白话讲清楚React渲染原理

    前言 相信很多人跟我之前一样 看到源码两个字觉得触不可及 觉得离自己还很遥远 是需要非常多年的工作经验的大佬才能触及到的领域 就在去年我改变了这个想法 当时被react的几个生命周期执行顺序弄的睡不着觉 为什么有些时候生命周期的执行事与愿违
  • 小软件项目开发的管理

    小软件项目开发的管理 创建成功的工程 成功项目管理的秘密 更好地领导一个项目的诀窍 参与变革 走向成功 CMM TSP PSP讲义稿 开发流程中的可用性 软件开发的管理和控制 如何组织软件开发团队 软件项目管理 CMM 经验谈 实施CMM
  • stable-diffusion的webui和comfyuig共享模型路径

    1 修改上图extra model paths yaml example为extra model paths yaml Rename this to extra model paths yaml and ComfyUI will load
  • 最长公共子序列问题(Java)-动态规划

    动态规划法 经常会遇到复杂问题不能简单地分解成几个子问题 而会分解出一系列的子问题 简单地采用把大问题分解成子问题 并综合子问题的解导出大问题的解的方法 问题求解耗时会按问题规模呈幂级数增加 为了节约重复求相同子问题的时间 引入一个数组 不
  • 关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException

    关于Springcloud的RestTemplate使用服务名报异常java net UnknownHostException和使用localhost 8081报异常java lang IllegalStateException No in