微服务之间调用几种方法

这篇具有很好参考价值的文章主要介绍了微服务之间调用几种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微服务之间调用几种方法

一、RestTemplate方式
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
服务的消费者(order)调用服务的提供者(Goods)

@Autowired
private RestTemplate restTemplate;

@GetMapping("/createOrder/{gid}/{number}")
public Order order(@PathVariable("gid") Integer id,@PathVariable("number") Integer number){
    log.info("用户开始下单,调用商品系统,查询{}号商品信息",id);
    Goods goods = restTemplate.getForObject("http://localhost:9002/goods/getGoods/" + id, Goods.class);
    log.info("商品信息查询完毕:"+ JSON.toJSONString(goods));
 
    log.info("开始下单:");
    Order order = new Order();
    order.setUid(1);
    order.setUname("测试用户");
    order.setGid(goods.getId());
    order.setGname(goods.getGoodsName());
    order.setNumber(number);
 
    orderService.createOrder(order);
    log.info("下单成功");
    return order;
}

通过上面的方式我们解决了微服务之间的相互调用,但是存在硬编码的问题,如果服务提供者的地址发生变化,就需要手工修改代码;如果有多个服务提供者,无法实现服务的负载均衡;如果服务增多,人工调用会变得更加的复杂。

这个时候就会需要服务治理,服务治理是微服务架构最核心的问题,用于实现各个微服务的自动化注册与发现。在这里选择Nacos。

二、引入Nacos注册中心
1.在服务的提供者与消费者的pom文件中引入依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

2.在application.yml中添加配置

spring:
cloud:
nacos:
discovery:
server-addr: 192.168.206.151:8848
3.在对应的微服务上添加

@EnableDiscoveryClient
4.代码

@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;

@GetMapping("/createOrder2/{gid}/{number}")
public Order order2(@PathVariable("gid") Integer id,@PathVariable("number") Integer number){
    log.info("用户开始下单,调用商品系统,查询{}号商品信息",id);
    //从nacos中获取服务地址
    ServiceInstance service = discoveryClient.getInstances("goods-service").get(0);
    String url = service.getHost() + ":" + service.getPort();
    //通过restTemplate调用
    Goods goods = restTemplate.getForObject("http://"+url+"/goods/getGoods/" + id, Goods.class);
    log.info("商品信息查询完毕:"+ JSON.toJSONString(goods));
 
    log.info("开始下单:");
    Order order = new Order();
    order.setUid(1);
    order.setUname("测试用户");
    order.setGid(goods.getId());
    order.setGname(goods.getGoodsName());
    order.setNumber(number);
 
    orderService.createOrder(order);
    log.info("下单成功");
    return order;
}

注:DiscoveryClient是专门负责服务注册和发现的,我们可以通过它获取到注册到注册中心的所有服务

三、Fegin实现服务调用
Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。

Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。

在服务消费者上进行以下操作:

1.添加依赖

org.springframework.cloud spring-cloud-starter-openfeign

2.在启动类上添加注解

@EnableFeignClients
3.新建client包,并创建接口(把服务提供者controller对应的方法名复制过来,注意路径要完整。

@FeignClient(“goods-service”)
public interface GoodsService {

@RequestMapping("/goods/getGoods/{id}")
public Goods goods(@PathVariable("id") Integer id);

}
4.代码

@Autowired
private GoodsService goodsService;

@GetMapping("/createOrder3/{gid}/{number}")
public Order order3(@PathVariable("gid") Integer id,@PathVariable("number") Integer number){
    log.info("用户开始下单,调用商品系统,查询{}号商品信息",id);
 
    //通过feign调用商品微服务
    Goods goods = goodsService.goods(id);
    log.info("商品信息查询完毕:"+ JSON.toJSONString(goods));
 
    log.info("开始下单:");
    Order order = new Order();
    order.setUid(1);
    order.setUname("测试用户");
    order.setGid(goods.getId());
    order.setGname(goods.getGoodsName());
    order.setNumber(number);
 
    orderService.createOrder(order);
    log.info("下单成功");
    return order;
}

想了解更多,关注wx视频号:石工记,DouY:石工记 看视频更直观文章来源地址https://www.toymoban.com/news/detail-606580.html

到了这里,关于微服务之间调用几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

            Feign是一个声明式的 HTTP客户端框架 ,用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分,旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。         Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下,在微服务

    2024年02月15日
    浏览(28)
  • 两台linux服务器之间传输文件的几种方法

    打开powershell, 开始连接服务器 然后输入密码后就进来了,进入之后找到你要传输文件的位置 接下来我要将这个包传到另一个环境中去,有以下几种方法 scp 示例: 将本地服务器的文件传向另一个服务器 wget 【用法】 wget是一个从网络上自动下载文件的自由工具,支持通过HT

    2024年02月12日
    浏览(41)
  • 微信小程序 - 调用后台api接口方法

    2024年01月16日
    浏览(38)
  • 淘宝详情API接口文档(java)get调用

    淘宝详情API接口是用于获取淘宝商品详细信息的接口,它允许开发者通过发送请求,获取商品的描述、价格、评价等信息。下面是一个关于淘宝详情API接口的示例文档,包括接口地址、请求参数、响应参数等内容。 淘宝详情API接口文档 一、接口地址 二、请求参数 三、请求示

    2024年04月11日
    浏览(26)
  • 关于阿里云的API接口调用使用说明以及使用艾格瑞特API接口获取验证码的方法

    需要在API网关控制台创建APP,然后将API授权给APP即可。 使用详情页给的请求示例!!!(替换示例中的AppCode)就可以了 本发明涉及互联网技术领域,具体涉及一种API自动管理和SDK、文档自动生成方法。 背景技术: 伴随着互联网时代的多元化发展,更多技术人员将精力投入

    2023年04月18日
    浏览(34)
  • Java调用ChatGPT的API接口实现对话与图片生成

    有些魔法是需要做配置的。否则无法正确实现代码测试。这里以我使用的工具为例说明。 在pom.xml文件中添加: Constants类中,声明自己的API Key 其中,查看API Key的位置: https://platform.openai.com/account/api-keys 余额查询: https://platform.openai.com/account/usage pom.xml文件中需要增加依赖:

    2024年02月07日
    浏览(40)
  • PHP版滴滴cps联盟Api签名生成和接口调用方法分享

    最近准备把我自己开发的淘客系统接入滴滴联盟平台,做打车优惠券搞佣金。 由于淘客系统本身是PHP开发的,所以只能采用PHP的代码接入滴滴联盟Api 下面把滴滴联盟签名生成和接口调用的代码分享给大家  

    2024年02月08日
    浏览(48)
  • spring boot java项目整合Scala&Spark,接口api调用方式调用scala代码,配置分享

    版本说明: spring boot: 2.5.9 jdk:1.8 spark:2.4.5 sclala:2.11.12 首先你需要有一个完美的spring boot项目(java版本)能成功运行,这就不赘述了,按照网上的自己搭建吧,然后重要的来了,我捣鼓了两天时间,各样的报错见过了,网上的处理方法要嘛是不全,要嘛是没有用,各种办

    2024年02月10日
    浏览(42)
  • java跨服务调用接口

    Java程序跨服务调用接口,通常可以使用以下方式: RESTful API:通过HTTP协议进行通信,使用RESTful API调用其他服务的接口。 RPC:使用远程过程调用(RPC)框架,如Dubbo、gRPC等,通过序列化和反序列化技术实现跨服务调用。 消息队列:使用消息队列,如Kafka、RabbitMQ等,服务之间

    2024年02月12日
    浏览(41)
  • java调用文心一言API的方法

    话不多说,直接上干货: 一、首先去官网注册一个账号百度智能云-登录 (baidu.com),注册完成后等待审核,审核后就可以去控制台操作啦! 二、根据官网介绍,由于文心一言属于收费产品(也有免费的,但功能限制),因此建议可以充值几块钱,足以做实验用了。我这里用的

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包