【feign】springcloud集成feign(一)

前言

maven依赖

<!-- feign依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.3.RELEASE</version>
</dependency>

项目结构

首先,介绍我这边代码结构,省的后面你们看不懂。

  • sds-core-server-user-api api:里面有实体类,以及feign的api接口
  • sds-core-server-user 服务端:里面主要是常规的service,另外就是api实现类了
  • sds-website-server-base 消费端:调用服务端

服务端和消费端都引用了api,下面代码示例里面着重介绍这三块。

代码示例

  • sds-core-server-user-api
    在这里插入图片描述

    feign api接口 (下面代码基本包括了大部分传参类型)

    import com.core.server.entity.BasePrivilege;
    import com.core.server.entity.BaseRole;
    import com.core.server.entity.BaseUser;
    import com.core.server.entity.dto.BasePrivilegeDto;
    import com.core.server.entity.dto.BaseRoleDto;
    import com.core.server.entity.dto.BaseUserDto;
    import com.core.server.entity.dto.search.BasePrivilegeSearchDto;
    import com.core.server.entity.dto.search.BaseRoleSearchDto;
    import com.core.server.entity.dto.search.BaseUserSearchDto;
    import com.core.server.entity.dto.security.SecurityRoleDto;
    import com.core.server.entity.dto.security.SecurityUserDto;
    import com.core.server.entity.dto.system.PrivilegeTree;
    import com.core.server.system.feign.FeignConfiguration;
    import com.github.pagehelper.PageInfo;
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import java.util.List;
    
    /**
     * @author :qilong sun
     * @date :Created in 2019/11/23 18:40
     * @description:用户服务api接口
     * @modified By:
     * @version: 1.0$
     */
    @FeignClient(value = "sds-basic-server-gateway", fallback = BaseUserFeignFallBack.class, configuration = FeignConfiguration.class)
    public interface BaseUserFeignServiceApi {
          
          
        String serverName = "/sds-core-server-user";
    
        /**
         * 删除用户
         * @param userId
         * @param deleteUserId
         * @return
         */
        @PostMapping(value = serverName+"/deleteBaseUser", produces = "application/json; charset=UTF-8")
        Boolean deleteBaseUser(@RequestParam("userId")Integer userId, @RequestParam("deleteUserId")Integer deleteUserId);
    
        /**
         * 保存用户
         * @param userId
         * @param baseUserDto
         * @return
         */
        @PostMapping(value = serverName+"/saveBaseUser", produces = "application/json; charset=UTF-8")
        Boolean saveBaseUser(@RequestParam("userId")Integer userId, @RequestBody BaseUserDto baseUserDto);
    
        /**
         * 查询所有的资源树
         * @return
         */
            @PostMapping(value = serverName+"/queryAllPrivilegeTree", produces = "application/json; charset=UTF-8")
        List<PrivilegeTree> queryAllPrivilegeTree();
    
        /**
         * 删除角色
         * @param userId
         * @param roleId
         * @return
         */
        @PostMapping(value = serverName+"/deleteBaseRole", produces = "application/json; charset=UTF-8")
        Boolean deleteBaseRole(@RequestParam("userId")Integer userId, @RequestParam("roleId")Integer roleId);
    
        /**
         * 保存角色信息(添加,修改)
         * @param userId
         * @param baseRoleDto
         * @return
         */
        @PostMapping(value = serverName+"/saveBaseRole", produces = "application/json; charset=UTF-8")
        Boolean saveBaseRole(@RequestParam("userId")Integer userId, @RequestBody BaseRoleDto baseRoleDto);
    
        /**
         * 根据角色ID查询角色详情
         * @param roleId
         * @return
         */
        @PostMapping(value = serverName+"/queryBaseRoleDto", produces = "application/json; charset=UTF-8")
        BaseRoleDto queryBaseRoleDto(@RequestParam("roleId")Integer roleId);
    
        /**
         * 查询角色分页列表
         * @param baseRoleSearchDto
         * @return
         */
        @PostMapping(value = serverName+"/queryBaseRolePageList", produces = "application/json; charset=UTF-8")
        PageInfo<BaseRole> queryBaseRolePageList(@RequestBody BaseRoleSearchDto baseRoleSearchDto);
    
        /**
         * 查询用户角色分页列表
         * @param baseUserSearchDto
         * @return
         */
        @PostMapping(value = serverName+"/selectBaseUserAndRolePageList", produces = "application/json; charset=UTF-8")
        PageInfo<BaseUserDto> selectBaseUserAndRolePageList(@RequestBody BaseUserSearchDto baseUserSearchDto);
    
        /**
         * 查询资源分页列表
         * @param basePrivilegeSearchDto
         * @return
         */
        @PostMapping(value = serverName+"/queryBasePrivilegePageList", produces = "application/json; charset=UTF-8")
        PageInfo<BasePrivilegeDto> queryBasePrivilegePageList(@RequestBody BasePrivilegeSearchDto basePrivilegeSearchDto);
    
        /**
         * 根据用户查询侧边栏菜单
         * @param userId
         * @return
         */
        @PostMapping(value = serverName+"/queryAsideMenuByUserId", produces = "application/json; charset=UTF-8")
        List<PrivilegeTree> queryAsideMenuByUserId(@RequestParam("userId")Integer userId);
    
        /**
         * 查询用户分页列表
         * @param baseUserSearchDto
         * @return
         */
        @PostMapping(value = serverName+"/queryUserInfoPageList", produces = "application/json; charset=UTF-8")
        PageInfo<BaseUserDto> queryUserInfoPageList(@RequestBody BaseUserSearchDto baseUserSearchDto);
    
        /**
         * 根据用户ID查询资源列表
         * @param userId
         * @return
         */
        @PostMapping(value = serverName+"/queryBasePrivilegeByUserId", produces = "application/json; charset=UTF-8")
        List<BasePrivilege> queryBasePrivilegeByUserId(@RequestParam("userId") Integer userId);
    
        /**
         * 根据账号查询用户信息
         * @param username
         * @return
         */
        @PostMapping(value = serverName+"/queryBaseUserByUsername", produces = "application/json; charset=UTF-8")
        BaseUser queryBaseUserByUsername(@RequestParam("username") String username);
    
        /**
         * 查询单个用户
         * @param baseUser
         * @return
         */
        @PostMapping(value = serverName+"/queryBaseUser", produces = "application/json; charset=UTF-8")
        BaseUser queryBaseUser(@RequestBody BaseUser baseUser);
    
        /**
         * 查询单个用户详情
         * @param baseUserDto
         * @return
         */
        @PostMapping(value = serverName+"/queryBaseUserDetail", produces = "application/json; charset=UTF-8")
        BaseUserDto queryBaseUserDetail(@RequestBody BaseUserDto baseUserDto);
    
        /**
         * 根据角色编码,查询角色信息
         * @param codeName
         * @return
         */
        @PostMapping(value = serverName+"/querySecurityRoleDtoByCodeName", produces = "application/json; charset=UTF-8")
        SecurityRoleDto querySecurityRoleDtoByCodeName(@RequestParam("codeName") String codeName);
    
        /**
         * 根据登录账号查询用户信息(基本信息,角色信息)
         * @param username
         * @return
         */
        @PostMapping(value = serverName+"/querySecurityUserDtoByOne", produces = "application/json; charset=UTF-8")
        SecurityUserDto querySecurityUserDtoByOne(@RequestParam("username") String username);
    }
    
    

    fallback (避免篇幅过长,此处仅显示一部分)

    import com.core.server.entity.dto.BasePrivilegeDto;
    import com.core.server.entity.dto.BaseRoleDto;
    import com.core.server.entity.dto.BaseUserDto;
    import com.core.server.entity.dto.search.BasePrivilegeSearchDto;
    import com.core.server.entity.dto.search.BaseRoleSearchDto;
    import com.core.server.entity.dto.search.BaseUserSearchDto;
    import com.core.server.entity.dto.security.SecurityRoleDto;
    import com.core.server.entity.dto.security.SecurityUserDto;
    import com.core.server.entity.dto.system.PrivilegeTree;
    import com.core.server.entity.BasePrivilege;
    import com.core.server.entity.BaseRole;
    import com.core.server.entity.BaseUser;
    import com.github.pagehelper.PageInfo;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    /**
     * @author :qilong sun
     * @date :Created in 2020/1/4 16:48
     * @description:
     * @modified By:
     * @version: $1.0
     */
    @Component
    public class BaseUserFeignFallBack implements BaseUserFeignServiceApi{
          
          
        @Override
        public Boolean deleteBaseUser(Integer userId, Integer deleteUserId) {
          
          
            return null;
        }
    
        @Override
        public Boolean saveBaseUser(Integer userId, BaseUserDto baseUserDto) {
          
          
            return null;
        }
    
        @Override
        public List<PrivilegeTree> queryAllPrivilegeTree() {
          
          
            return null;
        }
    }
    

    FeignConfiguration

    import feign.RequestInterceptor;
    import feign.RequestTemplate;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author :qilong sun
     * @date :Created in 2020/6/17 15:38
     * @description:Feign调用的时添加请求头from https://blog.csdn.net/Hpsyche/article/details/102926010
     * @modified By:
     * @version: V1.0$
     */
    @Configuration
    public class FeignConfiguration implements RequestInterceptor {
          
          
    
        @Override
        public void apply(RequestTemplate requestTemplate) {
          
          
        	// 此处是我在集成gateway时添加的测试代码,只是使用feign的话可以把这行注释掉
            requestTemplate.header("from", "gateway");
        }
    }
    
    
  • sds-core-server-user 服务端
    服务端主要就是api实现类了

    import com.basic.util.service.impl.BaseServiceImpl;
    import com.core.server.entity.dto.BasePrivilegeDto;
    import com.core.server.entity.dto.BaseRoleDto;
    import com.core.server.entity.dto.BaseUserDto;
    import com.core.server.entity.dto.search.BasePrivilegeSearchDto;
    import com.core.server.entity.dto.search.BaseRoleSearchDto;
    import com.core.server.entity.dto.search.BaseUserSearchDto;
    import com.core.server.entity.dto.security.SecurityRoleDto;
    import com.core.server.entity.dto.security.SecurityUserDto;
    import com.core.server.entity.dto.system.PrivilegeTree;
    import com.core.server.entity.BasePrivilege;
    import com.core.server.entity.BaseRole;
    import com.core.server.entity.BaseUser;
    import com.core.server.service.BasePrivilegeService;
    import com.core.server.service.BaseRoleService;
    import com.core.server.service.BaseUserService;
    import com.core.server.service.api.user.BaseUserFeignServiceApi;
    import com.github.pagehelper.PageInfo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /**
     * @author :qilong sun
     * @date :Created in 2019/11/24 10:22
     * @description:用户接口
     * @modified By:
     * @version: 1.0$
     */
    @Service
    @RestController
    public class BaseUserFeignServiceApiImpl extends BaseServiceImpl<BaseUser> implements BaseUserFeignServiceApi {
          
          
        @Autowired
        BaseUserService baseUserService;
        @Autowired
        BaseRoleService baseRoleService;
        @Autowired
        BasePrivilegeService basePrivilegeService;
    
        @Override
        public Boolean deleteBaseUser(Integer userId, Integer deleteUserId) {
          
          
            return baseUserService.deleteBaseUser(userId, deleteUserId);
        }
    
        @Override
        public Boolean saveBaseUser(Integer userId, BaseUserDto baseUserDto) {
          
          
            return baseUserService.saveBaseUser(userId, baseUserDto);
        }
    
        @Override
        public List<PrivilegeTree> queryAllPrivilegeTree() {
          
          
            return baseRoleService.queryAllPrivilegeTree();
        }
    
        @Override
        public Boolean deleteBaseRole(Integer userId, Integer roleId) {
          
          
            return baseRoleService.deleteBaseRole(userId, roleId);
        }
    
        @Override
        public Boolean saveBaseRole(Integer userId, BaseRoleDto baseRoleDto) {
          
          
            return baseRoleService.saveBaseRole(userId, baseRoleDto);
        }
    
        @Override
        public BaseRoleDto queryBaseRoleDto(Integer roleId) {
          
          
            return baseRoleService.queryBaseRoleDto(roleId);
        }
    
        @Override
        public PageInfo<BaseRole> queryBaseRolePageList(BaseRoleSearchDto baseRoleSearchDto) {
          
          
            return baseRoleService.queryBaseRolePageList(baseRoleSearchDto);
        }
    
        @Override
        public PageInfo<BaseUserDto> selectBaseUserAndRolePageList(BaseUserSearchDto baseUserSearchDto) {
          
          
            return baseUserService.selectBaseUserAndRolePageList(baseUserSearchDto);
        }
    
        @Override
        public PageInfo<BasePrivilegeDto> queryBasePrivilegePageList(BasePrivilegeSearchDto basePrivilegeSearchDto) {
          
          
            return basePrivilegeService.queryBasePrivilegePageList(basePrivilegeSearchDto);
        }
    
        @Override
        public List<PrivilegeTree> queryAsideMenuByUserId(Integer userId) {
          
          
            return baseUserService.queryAsideMenuByUserId(userId);
        }
    
        @Override
        public PageInfo<BaseUserDto> queryUserInfoPageList(BaseUserSearchDto baseUserSearchDto) {
          
          
            return baseUserService.queryUserInfoPageList(baseUserSearchDto);
        }
    
        @Override
        public List<BasePrivilege> queryBasePrivilegeByUserId(Integer userId) {
          
          
            return basePrivilegeService.queryBasePrivilegeByUserId(userId);
        }
    
        @Override
        public BaseUser queryBaseUserByUsername(String username) {
          
          
            return baseUserService.queryBaseUserByUsername(username);
        }
    
        @Override
        public BaseUser queryBaseUser(BaseUser baseUser) {
          
          
            return baseUserService.queryBaseUser(baseUser);
        }
    
        @Override
        public BaseUserDto queryBaseUserDetail(BaseUserDto baseUserDto) {
          
          
            return baseUserService.queryBaseUserDetail(baseUserDto);
        }
    
        @Override
        public SecurityRoleDto querySecurityRoleDtoByCodeName(String codeName) {
          
          
            return baseUserService.querySecurityRoleDtoByCodeName(codeName);
        }
    
        @Override
        public SecurityUserDto querySecurityUserDtoByOne(String username) {
          
          
            return baseUserService.querySecurityUserDtoByOne(username);
        }
    }
    
    
  • sds-website-server-base
    首先,启动类添加feign注解(不同的配置自己另外搜一下)

    @EnableFeignClients(basePackages = {
          
          "com.core.server.*"},defaultConfiguration = FeignClientsConfiguration.class)
    

    其次,在业务代码里面直接通过api里面的接口,调用就行了

    baseUserFeignServiceApi.queryAsideMenuByUserId(userId)
    

结语

如果是get方法,那直接把api接口上的注解改一下就好了。
现存问题:

  • 服务端如果有多个api接口会有问题;
  • fallback可以抽取出公共代码。这样就不用每个方法都一一实现了

这些以后再用的时候,再处理。

猜你喜欢

转载自blog.csdn.net/s1441101265/article/details/107997017