jov1 最近的时间轴更新
jov1

jov1

V2EX 第 496057 号会员,加入于 2020-06-23 17:23:35 +08:00
jov1 最近回复了
看起来线程池在业务方法里面每次创建吗,这个建议放全局,然后如果要等一批任务异步执行完,可以这样
```
List<CompletableFuture<String>> futures = inputs.stream()
.map(input -> CompletableFuture.supplyAsync(() -> process(input), executorService))
.collect(Collectors.toList());

// 等待所有任务完成并收集结果
return futures.stream().map(CompletableFuture::join).collect(Collectors.toList());
```
或者还是用线程池,但是用 CountDownLatch 等待任务执行都可以。
23 天前
回复了 bler 创建的主题 程序员 一个权限控制问题
rbac 能解决一部分垂直越权问题,也就是对于接口或其他资源的访问控制, 比如限制某人有某接口、按钮操作、什么什么的权限,但是解决不了水平越权和数据权限问题,比如大家都能看订单,有的希望按照组织架构,级别高的可以看所有子级的,这种有的方案是在对于资源记录所属组织,比如资源上增加该资源所属组织路径,/a/b, 查询时候按照这个过滤,有的是大家都有查看订单权限,如果我通过?orderId=xx 访问一个不是我的订单的详情或者什么数据,这种有些用多租户,就是需要控制数据查看的表都增加租户 id 这样的字段,进行全局 sql 拦截过滤数据,或者不合适多租户需求的业务就根据具体业务写在具体业务代码里,目前我自己是没有找到很通用的关于数据权限的模型或框架工具。
我是之前在阳朔旅拍的,中间没有加什么价格,一般额外加的钱就是选片时候,一般套餐的精修和相册都不会特别多,选片时会给你推荐,比如可以多加一些精修相片,加的多了就需要一个相册,相册呢也可以升级成更好更大的那种,类似这样的,你们自己把握就行,丰俭由人。跟楼上说的一样,提前商量好,注意别吵架,开心第一,相册后面都是压箱底了。
46 天前
回复了 chenfang 创建的主题 程序员 集群如何控制 QPS?
假设这样一个场景,你的某个业务需要调用一个第三方接口,但是第三方接口有 QPS 限制,比如 20/每秒,
但是你的服务是集群部署的,通过 guava 的令牌桶可以实现单机的 QPS 控制,比如 RateLimiter.create(20, 1, TimeUnit.SECONDS);
如果部署 3 个集群,那么 QPS 最大可能为 60/每秒,这样就超过三方接口限制。
那么这种情况可以拆分为如何将 20 合理的分配到 3 个集群上,简单点使用 xxl-job ,根据分片总数和当前分片序号,以及你需要限制的 QPS ,计算得到每个分片的大小,替换到令牌桶上就可以了。

下面这个分配总数 count 就是你程序里面要定义的 qps 了。
RateLimiter.create(count, 1, TimeUnit.SECONDS);

```
public static void main(String[] args) {
// xxl-jpb 返回集群分片信息
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();


int totalSize = 20; //集群自己配置总的 qps
int shardingTotal = shardingVO.getTotal(); // xxl-job 返回的当前分片总数
int shardingIndex = shardingVO.getIndex(); // xxl-job 返回的当前分片序号

int count = getShardingCount(totalSize, shardingIndex, shardingTotal);
System.out.println("分片 " + shardingIndex + " 分配数量: " + count);
}

public static int getShardingCount(int totalSize, int shardingIndex, int shardingTotal) {
int baseSize = totalSize / shardingTotal; // 每个分片的基本数量
int remainder = totalSize % shardingTotal; // 余数部分

// 前 remainder 个分片分配 baseSize + 1 个元素,之后的分片分配 baseSize 个元素
return shardingIndex < remainder ? baseSize + 1 : baseSize;
}
```
52 天前
回复了 abstime 创建的主题 Java 文件上传后解压缩的问题
之前用的 hutool 另外 api 解压,windows 和 linux 都正常运行,可以试下
```
// 解压目录
File extractFile = new File(extractPath);
Extractor extractor = CompressUtil.createExtractor(
CharsetUtil.CHARSET_GBK,
FileUtil.file("d:/test/compress/test.zip"));

extractor.extract(FileUtil.file(extractFile));
// 获取目录 extractFile 下文件做其他处理。。。
```
144 天前
回复了 atfeel 创建的主题 程序员 大佬都在什么验证码方案?
如果用的云厂商的短信发送,我这个目前用的腾讯云,配套有相应的安全策略配置之类的,比如配置发送频率,ip 限制等,同时也提供验证码服务,就是你描述的拖动类验证码,不过要收费不是免费的,这种拦截的事情交给他们来
172 天前
回复了 guch99999 创建的主题 Java 求教 springcloud 集成 websocket 报错 1009.
WebSocket 缓冲区小,传入数据太大,试试找的例子,构建 websocket 客户端连接的时候,配置下大小

WebSocketContainer container = new WsWebSocketContainer();
// 设置二进制消息缓冲区大小(以字节为单位)
container.setDefaultMaxBinaryMessageBufferSize(5120000);
// 设置文本消息缓冲区大小(以字节为单位)
container.setDefaultMaxTextMessageBufferSize(5120000);
// 设置会话空闲超时时间(以毫秒为单位)
container.setDefaultMaxSessionIdleTimeout(15 * 60000L);
StandardWebSocketClient client = new StandardWebSocketClient(container);
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2860 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 12:43 · PVG 20:43 · LAX 04:43 · JFK 07:43
Developed with CodeLauncher
♥ Do have faith in what you're doing.