基于FeignClient提供简单的用户查询服务
前言:
由于系统升级,之前的员工数据库(mongo库)被弃用,改为用python维护的mysql库,其他系统访问通过http请求,表结构对外不可见,其他系统之前对员工mongo库的依赖要解除。每套系统都去写请求的接口太麻烦,所以打算写一个员工查询服务,http请求用原生的FeignClient实现。
实现思路:
场景:python端只提供了查询所有员工,其他系统请求多种多样。
解决:请求接口 --> 查询所有员工 --> FeignClient包装的http请求 --> 过滤条件
实现步骤演示:
- Feign包装的http请求:
/**
* 对外暴露接口.
*/
@FeignClient(name = XXXXClientConfig.APPLICATION_NAME, url = "https://xx.xxxx.com")
public interface IEmployService { @RequestMapping(value = "/xx/employee/search",
headers = {"Content-Type=application/json",
"App-Id=xxx",
"App-Secret=xxxx"})
@ResponseBody
ReturnUser getAllUser(@RequestBody GetAllUserForm getAllUserForm); }
- 员工服务接口:
@FeignClient(XXXXConfig.APPLICATION_NAME)
public interface IUserService { @RequestMapping(value = "/xxxx/getAll", method = RequestMethod.GET)
List<User> getAll(); @RequestMapping(value = "/xxxx/getUserByIds", method = RequestMethod.POST)
List<User> getUserByIds(@RequestBody List<String> userIds); @RequestMapping(value = "/xxxx/getById", method = RequestMethod.GET)
User getById(@RequestParam(value = "userId") String userId); @RequestMapping(value = "/xxxx/getByQuery", method = RequestMethod.POST)
List<User> getByQuery(@RequestBody UserQuery userQuery);
}
- 员工服务实现:
@RestController
public class UserSearchService implements IUserService {
private final static Logger log = LoggerFactory.getLogger("xxx");
private List<User> users = null;
private Long lastTime = null;
@Resource
private IEmployService employService; @Override
public List<User> getAll() {
if(users != null && users.size() > 0 && lastTime != null && (System.currentTimeMillis() - lastTime) <= 1000*60*10){
return users;
}
try {
GetAllUserForm form = new GetAllUserForm();
form.setPageNo(1);
form.setPageSize(99999);
ReturnUser allUser = employService.getAllUser(form);
users = new ArrayList<>();
allUser.getData().getRecords().forEach(returnUser -> {
User user = getUserFromReturnUser(returnUser);
users.add(user);
});
lastTime = System.currentTimeMillis();
return users;
}catch (Exception e){
if(users.size() > 0){
return users;
}else {
throw new RuntimeException("getAll(): user is null");
}
}
} @Override
public List<User> getUserByIds(@RequestBody List<String> userIds) {
List<User> all = getAll();
List<User> users = all.stream().filter(user -> userIds.contains(user.getId())).collect(Collectors.toList());
return users;
} @Override
public User getById(@RequestParam(value = "userId") String userId) {
List<User> all = getAll();
List<User> users = all.stream().filter(user -> user.getId().equals(userId))
.collect(Collectors.toList());
return users.size() == 1? users.get(0):null;
} @Override
public List<User> getByQuery(@RequestBody UserQuery userQuery) {
List<User> list = new ArrayList<>();
getAll().stream().filter(user -> {
if (CommonUtil.isNotBlank(userQuery.getName())) {
if (!userQuery.getName().equals(user.getName()) &&
!userQuery.getName().equals(user.getRealName())) {
return false;
}
}
if (CommonUtil.isNotBlank(userQuery.getKeyword())) {
if (!user.getName().contains(userQuery.getKeyword()) &&
!user.getRealName().contains(userQuery.getKeyword())) {
return false;
}
}
if (userQuery.getIds() != null) {
if (!userQuery.getIds().contains(String.valueOf(user.getNumber()))) {
return false;
}
}
return true;
}).forEach(user -> {
list.add(user);
});
return list;
} private User getUserFromReturnUser(Employee returnUser) {
User user = new User();
user.setName(returnUser.getName());
return user;
} }
- springboot启动添加
@EnableFeignClients(basePackages = {XXXXClientConfig.PACKAGE_PATH})
基于FeignClient提供简单的用户查询服务的更多相关文章
- 九、frp对外提供简单的文件访问服务
通过 static_file 插件可以对外提供一个简单的基于 HTTP 的文件访问服务.类似于http的文件索引! 服务端frps.ini配置[common]bind_addr = 0.0.0.0bi ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
- GraphQL介绍&使用nestjs构建GraphQL查询服务
GraphQL介绍&使用nestjs构建GraphQL查询服务(文章底部附demo地址) GraphQL一种用为你 API 而生的查询语言.出自于Facebook,GraphQL非常易懂,直接 ...
- 基于Servlet、JSP、JDBC、MySQL的一个简单的用户注冊模块(附完整源代码)
近期看老罗视频,做了一个简单的用户注冊系统.用户通过网页(JSP)输入用户名.真名和password,Servlet接收后通过JDBC将信息保存到MySQL中.尽管是个简单的不能再简单的东西,但麻雀虽 ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.10.配置用户NTF服务
2.10.配置用户NTF服务 2.10.1.配置节点RAC1 1) [root@linuxrac1 sysconfig]#sed -i 's/OPTIONS/#OPTIONS/g' /etc/sysc ...
- 【分布式】-- 基于Nacos、OpenFeign搭建的微服务抽奖系统后台小案例
1.项目介绍 最近入项目之前要求熟悉一下SpringCloud Nacos微服务基于Feign接口调用并整合Swagger2进行接口文档展示给前端,所以自己按照要求来编写并整合了一套基于SpringC ...
- MaxCompute,基于Serverless的高可用大数据服务
摘要:2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的“阿里云栖开发者沙龙大数据技术专场”走近北京联合大学,本次技术沙龙上,阿里巴巴高级技术专家吴永明为大家分享了 ...
- 用.net访问电子枢纽信用中心的数据查询服务
概要说明 电子枢纽全称国家交通运输物流公共信息平台,主要提供物流及生产企业进行物流相关数据交换的标准和API,详细介绍可参考其官网www.logink.org,本文假定阅读者对该平台已有了解,并已成功 ...
- 基于Solr的HBase多条件查询测试
背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级 的快 速检索,对于多字段的组合查询却无能为力.针对HBa ...
随机推荐
- 【Luogu3381】【模板】缩点
本文同步发表于https://www.zybuluo.com/Gary-Ying/note/1235385 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最 ...
- TFS Release 步骤调用命令行返回失败信息的处理方法
TFS Release中自定义步骤时,可以选择“命令行”,官方的文档中,并没有描述调用相关的程序后,如何返回失败信息.通过下面步骤,可以实现本标题描述的功能. 步骤一:编写Console Applic ...
- linux查看tomcat安装路径
#查看tomcat安装路径 sudo find / -name *tomcat*
- redis:set集合类型的操作(无序集合)
1. set集合类型的操作(无序集合) 集合具有无序性(没有顺序).确定性(描述是确定的).唯一性(没有重复的元素) 1.1. sadd key member [member ...] 语法:sadd ...
- R语言语法基础二
R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...
- PHP04
PHP04 1.HTTP(hypertext transfer protocol) 1)HTTP是端与端之间的通讯协议 chrome://net-internals/ 可查看DNS缓存 浏览器-检查- ...
- adb devices 找不到设备的解决方法
1.开启adb 2.查看设备时的报错 问题1:cannot connect to daemon 解决方法:找到占据5037端口的进城,并在“任务管理器”中依据“PID”查找到,解决进程 问题2:手机 ...
- sqlite "insert or replace" 和 "insert or ignore" 用法
insert or replace:如果不存在就插入,存在就更新insert or ignore:如果不存在就插入,存在就忽略只对UNIQUE约束的字段起作用.举例:建表:CREATE TABLE T ...
- 使用Træfɪk(traefik)来加速Qt在线更新
简述 在使用Qt的MaintenanceTool程序进行在线更新的时候遇到一个问题,就是访问download.qt.io实在太慢了,老是失败.所以想使用国内的镜像站来进行更新. 使用Qt的镜像站方法也 ...
- 构建自己的 Smart Life 私有云(一)-> 破解涂鸦智能插座
博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml 原文链接:https://blog.wang ...