服务的消费者如何调用服务的提供者


接上回 https://blog.csdn.net/weixin_43119903/article/details/104801613

创建服务的消费者

与创建服务提供者一样,这里就不详细介绍了

在服务的提供者中提供一个接口

@RestController
@RequestMapping("/product")
public class ProductController {

    @RequestMapping(value = "/getProduct/{id}",method = RequestMethod.GET)
    public String getProduct(@PathVariable Long id){
        return "id为:"+id;
    }
}

在消费者中调用此接口

可以使用各种工具,通过http请求此接口

只要可以发送http请求,都可以访问此接口,就像前端访问后端一样。如:

@Bean
public RestTemplate restTemplate(){
     return new RestTemplate();
}
@RestController
@RequestMapping("/demo")
public class DemoController {


    //注入restTemplate
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/get/{id}",method = RequestMethod.GET)
    public String get(@PathVariable Long id){
        return restTemplate.getForObject("http://localhost:9001/product/getProduct/"+id,String.class);
    }

}

通过注册中心访问此接口

我们可以从注册中心中获取相关服务信息,然后通过这些信息去访问这个接口,获取这些信息可以通过springcloud提供的DiscoveryClient类中的方法去获取

//注入restTemplate
    @Autowired
    private RestTemplate restTemplate;
    /**
     * 注入DiscoveryClient
     * spring cloud提供的获取原数组的工具类,调用方法获取服务的元数据信息
     * */
    @Autowired
    private DiscoveryClient discoveryClient;


    @RequestMapping(value = "/get/{id}",method = RequestMethod.GET)
    public String get(@PathVariable Long id){
        //调用discoveryClient方法
        List<ServiceInstance> instances = discoveryClient.getInstances("product-service");
        //里面只有一个instance(因为只有一个product-service)
        ServiceInstance instance = instances.get(0);
        //通过instance里面的信息,组合成url,访问服务接口
        return restTemplate.getForObject("http://"+instance.getHost()+":"+instance.getPort()+"/product/getProduct/"+id,String.class);
    }

集成ribbon后可以通过服务名进行获取

restTemplate.getForObject("http://product-service/product/getProduct/"+id,String.class);

怎么集成ribbon,会在往后的章节中提到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
服务消费者调用失败可能有多种原因,具体需要根据你的具体情况来分析。以下是一些可能导致服务消费者调用失败的常见问题和解决方法: 1. 检查服务提供者是否已经成功注册到 ZooKeeper。你可以使用 ZooKeeper 的命令行工具或可视化工具来检查服务提供者是否已经成功注册。如果服务提供者没有成功注册,那么服务消费者将无法找到该服务调用也会失败。 2. 检查服务消费者是否正确引用了服务提供者的接口。服务消费者调用服务提供者时,需要正确引用服务提供者的接口,否则将无法调用成功。你可以检查服务消费者代码中引用服务提供者接口的地方,确保其与服务提供者的接口一致。 3. 检查服务消费者的网络连接是否正常。服务消费者需要能够正确连接到 ZooKeeper 和服务提供者,才能调用服务。你可以检查服务消费者的网络连接是否正常,确保其可以与 ZooKeeper 和服务提供者建立连接。 4. 检查服务提供者的配置是否正确。服务提供者的配置可能会影响服务消费者调用。你可以检查服务提供者的配置项,确保其与服务消费者的配置一致。 5. 检查服务提供者的实现是否正确。如果服务提供者的实现有问题,可能会导致服务消费者调用失败。你可以检查服务提供者的实现代码,确保其正确实现了服务接口。 希望这些提示能够帮助你解决问题。如果你需要更多的帮助,请提供更多的上下文和错误信息,我会尽力为你提供帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值