• SpringCloud商品服务调用方式之feign


    简介:改造电商项目 order-service服务 调用商品服务获取商品信息
    Feign: 伪RPC客户端(本质还是用http)
    官方文档: https://cloud.spring.io/spring-cloud-openfeign/


    1、使用feign步骤讲解(新旧版本依赖名称不一样)

    order-service 加入依赖
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

    启动类增加@EnableFeignClients

    @SpringBootApplication
    @EnableFeignClients
    public class OrderServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderServiceApplication.class, args);
        }
    }

    增加一个接口 并@FeignClient(name="product-service")

    /**
     * 商品服务客户端
     */
    @FeignClient(name = "product-service")
    public interface ProductClient {
    
    
        @GetMapping("/api/v1/product/find")
        String findById(@RequestParam(value = "id") int id);
    
    
    }

    注意点:
    1、路径 / api/v1/product/find 必须一样

    2、Http方法必须对应
    3、使用requestBody,应该使用@PostMapping
    4、多个参数的时候,通过@RequestParam("id") int id)方式调用

    接口实现:

    package net.xdclass.order_service.service.impl;
    
    import com.fasterxml.jackson.databind.JsonNode;
    import net.xdclass.order_service.domain.ProductOrder;
    import net.xdclass.order_service.service.ProductClient;
    import net.xdclass.order_service.service.ProductOrderService;
    import net.xdclass.order_service.utils.JsonUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.Date;
    import java.util.UUID;
    
    @Service
    public class ProductOrderServiceImpl implements ProductOrderService {
    
        @Autowired
        private ProductClient productClient;
    
        @Override
        public ProductOrder save(int userId, int productId) {
    
            String response = productClient.findById(productId);
    
            JsonNode  jsonNode = JsonUtils.str2JsonNode(response);
    
            ProductOrder productOrder = new ProductOrder();
            productOrder.setCreateTime(new Date());
            productOrder.setUserId(userId);
            productOrder.setTradeNo(UUID.randomUUID().toString());
            productOrder.setProductName(jsonNode.get("name").toString());
            productOrder.setPrice(Integer.parseInt(jsonNode.get("price").toString()));
            return productOrder;
        }
    }

    调用save方法完成feign调用。。

    @RestController
    @RequestMapping("api/v1/order")
    public class OrderController {
        @Autowired
        private ProductOrderService productOrderService;
        @RequestMapping("save")
        public Object save(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId){
            return productOrderService.save(userId, productId);
        }
    
    }

    1、ribbon和feign两个的区别和选择
    选择feign
    默认集成了ribbon
    写起来更加思路清晰和方便
    采用注解方式进行配置,配置熔断等方式方便

  • 相关阅读:
    git创建一个空的版本库
    程序后台服务启动,MongoDB未启动(启动较慢)/(关机重启情况下)。
    启动客户端后台服务
    客户端后台服务(已注册机器)RabbitMQ未消费的情况
    MongoDB数据重复解决方案
    github中新建一个branch(分支)
    MES-后台服务卸载
    linux 第八章 高级键盘
    socketserver
    jmeter发送邮件的模板
  • 原文地址:https://www.cnblogs.com/daxiong225/p/13171041.html
Copyright © 2020-2023  润新知