前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloudAlibaba入门系列(4) - 服务调用Feign和Dubbo

SpringCloudAlibaba入门系列(4) - 服务调用Feign和Dubbo

作者头像
兜兜转转
发布2023-03-08 13:18:43
5440
发布2023-03-08 13:18:43
举报
文章被收录于专栏:CodeTime

摘要:介绍基于Feign来实现HTTP Restful服务的简化调用和基于阿里巴巴的Dubbo组件来实现RPC远程服务调用。

4.1 基于Feign实现服务调用

4.1.1 什么是Feign

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

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

4.1.2 Feign的使用

1 加入Fegin的依赖

12345

<!--fegin组件--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

2 在主类上添加Fegin的注解

1234

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClients//开启Feginpublic class OrderApplication {}

3 创建一个service, 并使用Fegin实现微服务调用

1234567

@FeignClient("service-product") //声明调用的提供者的namepublic interface ProductService { //指定调用提供者的哪个方法 //@FeignClient+@GetMapping 就是一个完整的请求路径 http://serviceproduct/product/{pid} @RequestMapping("/product/{pid}") Product findByPid(@PathVariable("pid") Integer pid);}

4 修改controller代码,并启动验证

12345678910111213141516171819202122232425262728293031

@RestController@Slf4jpublic class OrderController { @Autowired private RestTemplate restTemplate; @Autowired private OrderService orderService; @RequestMapping("/order/prod/{pid}") public Order order(@PathVariable("pid") Integer pid) { log.info("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息", pid); //通过fegin调用商品微服务 Product product = productService.findByPid(pid); log.info("查询到{}号商品的信息,内容是{}", pid, JSON.toJSONString(product)); Order order = new Order(); order.setUid(1); order.setUsername("测试用户"); order.setPid(product.getPid()); order.setPname(product.getPname()); order.setPprice(product.getPprice()); order.setNumber(1); orderService.createOrder(order); log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order)); return order; }}

5 重启order微服务,查看效果

4.2 Dubbo—rpc通信

4.2.1 介绍

Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

Spring-cloud-alibaba-dubbo 是基于SpringCloudAlibaba技术栈对dubbo技术的一种封装,目的在于实现基于RPC的服务调用。

4.2.2 实现

提供统一业务api

123

public interface ProductService { Product findByPid(Integer pid);}

注意:Product需实现接口java.io.Serializable

实现服务提供者

1 添加依赖

12345

<!--dubbo--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId></dependency>

2 添加dubbo配置

123456789

dubbo: scan: base-packages: com.taiji.service.impl # 开启包扫描 protocols: dubbo: name: dubbo # 服务协议 port: -1 # 服务端口 registry: address: spring-cloud://localhost # 注册中心

3 编写并暴露服务

1234567891011

//暴露服务 注意这里使用的是dubbo提供的注解@Service,而不是Spring的@Servicepublic class ProductServiceImpl implements ProductService { @Autowired private ProductDao productDao; @Override public Product findByPid(Integer pid) { return productDao.findById(pid).get(); }}

实现服务消费者

1 添加依赖

12345

<!--dubbo--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId></dependency>

2 添加dubbo配置

12345

dubbo: registry: address: spring-cloud://localhost # 注册中心 cloud: subscribed-services: service-product # 订阅的提供者名称

3 引用服务

1234567891011121314151617181920212223242526272829303132

@RestController@Slf4jpublic class OrderController { @Autowired private OrderService orderService; //服务引用 @Reference private ProductService productService; @RequestMapping("/order/prod/{pid}") public Order order(@PathVariable Integer pid) { log.info("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息", pid); //调用商品微服务,查询商品信息 Product product = productService.findByPid(pid); log.info("查询到{}号商品的信息,内容是:{}", pid, JSON.toJSONString(product)); //下单(创建订单) Order order = new Order(); order.setUid(1); order.setUsername("测试用户"); order.setPid(pid); order.setPname(product.getPname()); order.setPprice(product.getPprice()); order.setNumber(1); orderService.createOrder(order); log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order)); return order; }}

4 服务调用测试

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.1 基于Feign实现服务调用
    • 4.1.1 什么是Feign
      • 4.1.2 Feign的使用
      • 4.2 Dubbo—rpc通信
        • 4.2.1 介绍
          • 4.2.2 实现
            • 提供统一业务api
            • 实现服务提供者
            • 实现服务消费者
        相关产品与服务
        微服务引擎 TSE
        微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档