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

关于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注解

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
引用:Caused by: java.net.UnknownHostException: openapi.alipay.com。 引用: Springcloud-alibaba&nacos的RestTemplate使用服务名报异常java.net.UnknownHostException。 引用:基于Ribbon实现负载均衡时出现java.net.UnknownHostException: XXXXX异常java.net.UnknownHostException是一种Java异常,表示无法解析主机名或IP地址。它通常在网络通信中出现,当程序尝试连接到指定的主机或服务时,但无法找到主机或无法解析其IP地址时会抛出此异常。 具体针对"java.net.UnknownHostException: stock_service"的问题,由于引用内容中没有提供具体的上下文,无法准确判断股票服务(stock_service)是指的哪个具体的应用或组件。但是一般来说,这种异常发生可能是由于以下原因导致的: 1. 主机名或IP地址不正确:检查所连接的服务的主机名或IP地址是否正确,确保能够正确解析到对应的主机或IP地址。 2. 网络连接问题:确保网络连接正常,没有阻止与所连接服务进行通信的防火墙或网络配置。 3. DNS解析失败:如果使用了域名进行连接,那么可能是DNS解析失败导致无法解析主机名。可以尝试使用IP地址直接连接,或者检查DNS配置是否正确。 请根据具体的上下文和使用环境,结合上述可能的原因进行排查和解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Caused by: java.net.UnknownHostException: openapi.alipay.com](https://download.csdn.net/download/u011496822/10749662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Springcloud-alibaba&nacos的RestTemplate使用服务名报异常java.net.UnknownHostException](https://blog.csdn.net/ChitinLoveJAVA/article/details/123260176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [基于Ribbon实现负载均衡时出现java.net.UnknownHostException: XXXXX异常](https://blog.csdn.net/liyanlei5858/article/details/127412651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值