开发喵星球

若依微服务调用Feign(210)

若依微服务中使用Feign是一种方便的方式来实现微服务之间的通信。Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。以下是使用Feign进行微服务调用的一般步骤:

1、创建Feign接口

创建一个接口,使用@FeignClient注解指定要调用的服务名、降级处理工厂等信息。
在接口中定义需要调用的方法,包括请求方法、路径、请求参数等。

package com.ruoyi.system.api;

import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.factory.RemoteDeptFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;

import java.util.Map;

/**
 * 部门服务
 * @author ruoyi
 */
@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteDeptFallbackFactory.class)
public interface RemoteDeptService {
    /**
     * 获取部门列表
     *
     * @param source 请求来源
     * @return 结果
     * @RequestParam GET请求要指定类型 默认为POST请求
     */
    @GetMapping("/dept/remote/map")
    R<Map<Long, SysDept>> map(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);

}

2、编写降级处理

创建一个降级处理工厂,实现FallbackFactory接口,用于处理调用失败时的情况。

package com.ruoyi.system.api.factory;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.RemoteDeptService;
import com.ruoyi.system.api.domain.SysDept;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 部门服务降级处理
 *
 * @author ruoyi
 */
@Component
public class RemoteDeptFallbackFactory implements FallbackFactory<RemoteDeptService> {
    private static final Logger log = LoggerFactory.getLogger(RemoteDeptFallbackFactory.class);

    @Override
    public RemoteDeptService create(Throwable throwable) {
        log.error("部门服务调用失败:{}", throwable.getMessage());
        return new RemoteDeptService() {

            @Override
            public R<Map<Long, SysDept>> map(String source) {
                return R.fail("部门服务调用失败:" + throwable.getMessage());
            }
        };
    }
}

3、指定若依核心模块注入

根据项目需要,在配置文件中指定需要注入的降级处理工厂类。
位置:ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

com.ruoyi.system.api.factory.RemoteUserFallbackFactory
com.ruoyi.system.api.factory.RemoteLogFallbackFactory
com.ruoyi.system.api.factory.RemoteFileFallbackFactory

com.rjgf.system.api.factory.RemoteDeptFallbackFactory

如果是调用的是自定义模块,在SpringApplication上需要标识注解

@EnableRyFeignClients

4、调用Feign接口

在需要使用的地方注入使用

@Autowired
private RemoteDeptService remoteDeptService;
R<Map<Long, SysDept>> remoteDeptRusult = remoteDeptService.map(INNER);

if (R.FAIL == remoteDeptRusult.getCode()) {
    throw new BaseException("请联系系统管理员");
}

部门Controller中的接口

位置:ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java

@RestController
@RequestMapping("/dept")
public class SysDeptController extends BaseController
{
    @Autowired
    private ISysDeptService deptService;

    /**
     * 获取部门map
     */
    @InnerAuth
    @GetMapping("/remote/map")
    public R<Map<Long, SysDept>> map() {
        Map<Long, SysDept> collect = deptService.selectDeptList(new SysDept())
                .stream().collect(Collectors.toMap(SysDept::getDeptId, o -> o));
        return R.ok(collect);
    }
}

重启项目,若依微服务调用Feign完成✅

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-05-15 09:40:20 阅读量:119
<<   >>


powered by kaifamiao