资讯详情

springcloud微服务(六)—— 基于feign远程调用

springcloud微服务(六)—— 基于feign远程调用

我们前面的远程调是直接输入的url这样写不利于维护,也不够优雅。本节使用feign远程调用可以优雅地实现。

1.引入依赖

        <!-- feign客户端依赖-->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-openfeign</artifactId>         </dependency>         <!--springboot项目使用feign需加此依赖-->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-loadbalancer</artifactId>         </dependency> 

注意nacos中的ribbon会使loadbalanc我们将失败nacos依赖中的ribbon剔除。(feign负载均衡功能)

        <!-- nacos客户端依赖包 -->         <dependency>             <groupId>com.alibaba.cloud</groupId>             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>             <!-- nacos中的ribbon会使loadbalanc包失效-->             <exclusions>                 <exclusion>                     <groupId>org.springframework.cloud</groupId>                     <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
            <version>2.2.5.RELEASE</version>
        </dependency>

2.在需要进行远程调用服务的启动类中开启feign,添加@EnableFeignClients注解。

@SpringBootApplication
@EnableFeignClients
public class OrderServiceApplication { 
        

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

}

3.编写feign客户端。

package com.bzw.clients;


import com.bzw.domain.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("userservice") //服务名称
public interface UserClient { 
        

    @GetMapping("/user/{userId}") //请求方式路径
    User findById(@PathVariable("userId") Long id); //请求参数,返回类型
}

4.调用

package com.bzw.service.impl;

import com.bzw.clients.UserClient;
import com.bzw.domain.TbOrder;
import com.bzw.domain.User;
import com.bzw.mapper.TbOrderMapper;
import com.bzw.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private TbOrderMapper tbOrderMapper;

    @Autowired
    private UserClient userClient;

    public TbOrder findOrderById(Long id) {
//       查询订单
        TbOrder tbOrder = tbOrderMapper.selectByPrimaryKey(id);
//        用feign远程调用
        User user = userClient.findById(tbOrder.getUserId());
//        封装User到Order
        tbOrder.setUser(user);
//        返回
        return tbOrder;
    }

}

5.测试

访问 localhost:8080/order/101

在这里插入图片描述

标签: bzw04p26抑制二极管bzw04p17抑制二极管bzw04p64抑制二极管bzw04p128抑制二极管bzw22二极管bzw04p16b抑制二极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台