1、pom.xml中添加依赖

<!-- 服务注册/发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- feign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、启动类使用 @EnableDiscoveryClient 注解 (调用者与被调用,启动类都要加上这个注解)

设置feign接口包名@EnableFeignClients(basePackages = “com.atguigu.gulimail.member.feign”)

@EnableFeignClients(basePackages = "com.atguigu.gulimail.member.feign")
@MapperScan("com.atguigu.gulimail.member.dao")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {
    public static void main(String[] args) {
        SpringApplication.run(GulimallMemberApplication.class, args);
    }
}

在这里插入图片描述
3、服务A创建接口,确保该方法所在类在启动类feign接口扫描的包范围内

/**
 * 获取当前用户信息
 */
@InnerAuth
@GetMapping("/info/{username}")
public R<LoginUser> info(@PathVariable("username") String username)
{
    SysUser sysUser = userService.selectUserByUserName(username);
    if (StringUtils.isNull(sysUser))
    {
        return R.fail("用户名或密码错误");
    }
    // 角色集合
    Set<String> roles = permissionService.getRolePermission(sysUser);
    // 权限集合
    Set<String> permissions = permissionService.getMenuPermission(sysUser);
    LoginUser sysUserVo = new LoginUser();
    sysUserVo.setSysUser(sysUser);
    sysUserVo.setRoles(roles);
    sysUserVo.setPermissions(permissions);
    return R.ok(sysUserVo);
}

4、服务B,新建调用feign接口类,声明所需要调用feign接口

contextId:类名

value:注册的服务名称

fallbackFactory:可以捕获异常信息并返回默认降级结果。可以打印堆栈信息。

/**
 * 用户服务
 * 
 * @author ruoyi
 */
@FeignClient(contextId = "remoteUserService", value = "ruoyi-system", fallbackFactory = RemoteUserFallbackFactory.class)
public interface RemoteUserService
{
    /**
     * 通过用户名查询用户信息
     *
     * @param username 用户名
     * @param source 请求来源
     * @return 结果
     */
    @GetMapping("/user/info/{username}")
    public R<LoginUser> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 注册用户信息
     *
     * @param sysUser 用户信息
     * @param source 请求来源
     * @return 结果
     */
    @PostMapping("/user/register")
    public R<Boolean> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

服务降级处理

/**
 * 用户服务降级处理
 * 
 * @author ruoyi
 */
@Component
public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
{
    private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);

    @Override
    public RemoteUserService create(Throwable throwable)
    {
        log.error("用户服务调用失败:{}", throwable.getMessage());
        return new RemoteUserService()
        {
            @Override
            public R<LoginUser> getUserInfo(String username, String source)
            {
                return R.fail("获取用户失败:" + throwable.getMessage());
            }

            @Override
            public R<Boolean> registerUserInfo(SysUser sysUser, String source)
            {
                return R.fail("注册用户失败:" + throwable.getMessage());
            }
        };
    }
}

5、服务B调用服务A的feign接口,通过在服务B种声明的feign接口类进行调用

/**
 * 标注装配服务B中声明的feign接口
 * 
 * @author ruoyi
 */
@Autowired
private RemoteUserService remoteUserService;


// 调用feign接口,查询用户信息
R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
GitHub 加速计划 / na / nacos
29.83 K
12.75 K
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:3 个月前 )
4334cd16 * Support custom client configuration timeout.(#12748) * Add UT.(#12748) 9 天前
b04d2266 13 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐