why搞这么一个玩意

用过vue-cli的小伙伴会很轻松的搭建出一个包含vue骨架的前端开发组件,然后install所需要的模块,后台常见springcloud框架也是如此,但是少了所需要的好多模块,需要引入pom,还要兼容各种版本问题。

### 为了更快进行开发,搭建了一套适合后台的脚手架lei,前后端分离,restful风格接口开发,适合二次开发,主要包含以下模块。

> * 常见cloud模块 全家桶 注册中心 熔断 降级 网关等等

> * 集成常见java集成

> * springboot 集成`kafka`

> * springboot 集成`es` 实现全文检索

> * springboot 初步实现`zookeeper`注册发现

> * springboot 集成`mongodb`

> * springboot 集成`redis`

> * springboot 集成常见`mq`

> * 基于netty的`websocket`拓展 常见基于`json`、`protobuf`通讯拓展、粘包拆包等功能 推送和`im`即时通讯功能实现

> * sso单点登录

> * 常见功能 限流、 利用`aop`分布式锁的实现、`redission`分布式锁的应用等

> * 基于`client `模式的分库+分表核心jar包实现 以及分库产生的跨库事物等

> * 单机分布式事物框架整合 `atomikos`处理多数据源分布式事物

> * 还有其他业务功能待整合 分表之后数据聚合 报表模块 权限管理 等等

------

### 1. 功能清单 [Todo 列表]

- [x] springboot 集成kafka,zookeeper.redis,mongdb完成,初步实现缓存+全文检索

- [x] 基于client 水平分表方案完成 雪花算法生成id

- [x] 完成分布式锁demo,解决重复插入问题

- [x] 基于netty websocket 长连接推送和im完成 消息记录存储mongodb

- [x] 定时任务拆解完成

- [x] 垂直分表 分库以及产生的分布式事物

- [x] mysql读写分离 主库设置事物 同一Transcational 可以切数据源完成

- [ ] 权限接口+安全认证

- [ ] 限流+高并发接口设计

- [ ] 无状态应用水平拓展

- [ ] vue整合 前后端分离

- [ ] nginx负载

### 2. 项目模块介绍

- lei-api 对外暴露接口

- lei-app web rest接口 zookeeper kafka es等功能demo

- lei-demo zookeeper kafka es等功能demo 线程池封装等

- lei-common 一些公共工具包 aop实现分布式锁解决重复插入 单位时间重复请求

- lei-dao 普通mybatis配置 单库查询 mysql查询

- lei-eurake 注册中心

- lei-framework-istranstation 解决单机分布式事物 支持同一Transcation 切库操作 并支持多库事物

- lei-framework-notranstation 解决读写分离 支持主库事物 从库查询不支持事物

- lei-gateway 网关系统

- lei-im 基于netty websocket 长连接 推送 im即时通讯

- lei-job 定时任务+kafka消费

- lei-portal 门户首页

- lei-service 服务逻辑层

- lei-sso 单点登录系统

# 以下一些思路分享

# ** elasticsearch 常见查询

```

1. match match_phrase term

match 全文模糊匹配 分词 适用于text 例如 i am ding 分词设置 i am ding三个词 当match时候 i happy 也能搜到 happy world也能搜到

match_phrase 短语匹配 i am happy 分词成i am happy 当搜索 am happy 搜到 因为短语匹配

term 精确匹配 i am happy 分词成i am happy 当搜索 am happy 搜不到 因为没有分词设置

2.bool 查询 高级查询

must / mustnot/filter等太简单 自己查询即可

```

# ** 基于redission分布式锁demo 模拟100线程同时插入

```

package com.lei.smart;

import com.lei.smart.mapper.UserMapper;

import com.lei.smart.mapper.WebchatSchoolMapper;

import com.lei.smart.pojo.User;

import lombok.extern.slf4j.Slf4j;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.redisson.Redisson;

import org.redisson.api.RLock;

import org.redisson.api.RedissonClient;

import org.redisson.config.Config;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import java.awt.peer.LabelPeer;

import java.util.ArrayList;

import java.util.List;

import java.util.UUID;

import java.util.concurrent.*;

@RunWith(SpringRunner.class)

@SpringBootTest

@Slf4j

public class WebchatServiceTests {

@Autowired

UserMapper userMapper;

@Test

public void contextLoads() {

Config config = new Config();

config.useSentinelServers().addSentinelAddress("****,*****,****")

.setMasterName("mymaster");

// CountDownLatch countDownLatch =new CountDownLatch(1);

RedissonClient redissonClient = Redisson.create(config);

ExecutorService executorService = Executors.newFixedThreadPool(100);

CyclicBarrier cyclicBarrier = new CyclicBarrier(100);

for (int i = 0; i < 100; i++) {

executorService.submit(new Runnable() {

@Override

public void run() {

try {

// cyclicBarrier.

log.info(Thread.currentThread().getName() + ">>>>> block");

cyclicBarrier.await();

log.info(Thread.currentThread().getName() + ">>>>> open");

} catch (InterruptedException e) {

e.printStackTrace();

} catch (BrokenBarrierException e) {

e.printStackTrace();

}

// log.info("加锁前");

RLock lock = redissonClient.getLock("test10");

// log.info("加锁后");

try {

// log.info("尝试获取到分布式锁<<<<

boolean b = lock.tryLock(500, 2000, TimeUnit.MILLISECONDS);

log.info("获取到分布式锁<<<<

labview报表生成工具包_后台开发java 常见工具包 netty、mq 、分布式锁等,干货相关推荐

  1. 阿里秒挂,疯狂复习半个月,拿下美团offer(后台开发JAVA岗)

    美团后台开发JAVA岗:三面技术+HR面试 本来以为阿里面试至少能撑到二面,结果却秒挂了,呜呜伤心~回来后发愤图强,疯狂复习刷题半月(小小提示一下:文末有分享我的 复习刷题资料,可免费分享~),又重新 ...

  2. 死磕 java同步系列之redis分布式锁进化史

    问题 (1)redis如何实现分布式锁? (2)redis分布式锁有哪些优点? (3)redis分布式锁有哪些缺点? (4)redis实现分布式锁有没有现成的轮子可以使用? 简介 Redis(全称:R ...

  3. Java面试资料集合,后台开发JAVA岗

    前言 我在知乎上看到这样一个话题,关于程序员的: 听同学说干码农这行每天都要加班,这样的话,不就没精力做别的事情了.有个师兄做 IT 销售,不太辛苦,生活还算是美滋滋,是真的吗?我也知道社会上干哪一行 ...

  4. Mall商城的高级篇的开发(三)缓存与分布式锁

    缓存 在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快.通过缓存,可以高效地重用之前检索或计算的数据. 为什么要使用 ...

  5. 请列举你了解的分布式锁_面试官想要你回答的分布式锁实现原理

    写在前面 在了解分布式锁具体实现方案之前,我们应该先思考一下使用分布式锁必须要考虑的一些问题.​ 互斥性:在任意时刻,只能有一个进程持有锁. 防死锁:即使有一个进程在持有锁的期间崩溃而未能主动释放锁, ...

  6. 【java】为什么要有分布式锁?

    文章目录 1.为什么要有分布式锁? 2.分布式锁特性(五大特性 非常重要) 2-1 常见分布式锁的三种实现方式 2-2 本文我们主要聊 redis实现分布式锁: 3.分布式锁特性2之不会发生死锁 3- ...

  7. java中使用Redis实现分布式锁

    前言 目前很多大型的互联网公司后端都采用了分布式架构来支撑前端应用,其中服务拆分就是分布式的一种体现,既然服务拆分了,那么多个服务协调工作就会出现一些资源竞争的情况.比如多个服务对同一个表中的数据进行 ...

  8. java基础教程第三版耿祥义,后台开发JAVA岗

    Java虚拟机内存模型 Java虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致! Java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,而每个 ...

  9. c语言改变cmd 字体大小_嵌入式开发中常见3个的C语言技巧

    原文:https://www.cnblogs.com/CrazyCatJack/p/6080266.html 1.指向函数的指针 指针不光能指向变量.字符串.数组,还能够指向函数.在C语言中允许将函数 ...

最新文章

  1. 一个简单的Java web服务器实现
  2. c语言仿ce内存搜索工 源代码_C语言函数库:动态库和静态库优缺点比较
  3. MAVEN版本依赖的原则及scope
  4. leetcode刷题实录:4
  5. android studio多屏幕,为多个屏幕实现多个布局但在android studio 2.1中无法工作
  6. WPF 虚拟化 VirtualizingWrapPanel 和 VirtualLizingTilePanel
  7. 谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘
  8. 力扣637. 二叉树的层平均值(JavaScript)
  9. 关于程序员前途的看法和我系列文章的想法
  10. [轉]MS SQL 显示表结构
  11. PPT一般使用技巧总结
  12. k3服务器重装系统,金蝶K3安装教程07:K3 WEB系统配置工具
  13. 【服务器配置】php move_uploaded_file文件移动失败
  14. Day11如何衡量算法的时间复杂度和空间复杂度
  15. 谈google搜索引擎的使用
  16. 北航、商汤、UCSD 提出首个点云二值网络 BiPointNet(ICLR2021)
  17. matlab爆炸建模,7.2.5萨墓基尔加丹M螺旋爆炸技能建模分析
  18. 2021北航计算机考研人数,惊了!2021考研人数422万?!淘汰率或超过70%?8所高校报考人数汇总...
  19. 阿里达摩院人工智能科学家杨红霞离职,AI商用是难题
  20. 炒期货赚钱吗?掌握技巧才有得赚

热门文章

  1. ajax预加载html seo,AJAX网页如何实现SEO友好
  2. oracle 更新flwid,Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
  3. 哈工大威海算法设计与分析_【斯坦福算法分析和设计02】渐进分析
  4. 【快速入门Linux】6_Linux命令—用户权限相关命令
  5. gpu tensorflow 怎么看是否安装成功_安装keras模块以及使用GPU加速
  6. python plt.show_解决python中显示图片的plt.imshow plt.show()内存泄漏问题
  7. dom4j工具类_基于DOM4J的XML文件解析类
  8. qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...
  9. quarz设置定时器任务的有效时间段_quartz定时任务时间设置
  10. Linux read返回不足值,系统级I/O