public final class ParallelIntervalHelper extends Object
比如在发送设备消息时,设备不支持并行,需要将消息串行执行,
则可以使用此工具计算下一次发送的延迟,然后利用Mono.delay(Duration)来延迟发送.
private ParallelIntervalHelper intervalHelper = ParallelIntervalHelper.create(Duration.ofSeconds(1));
public Mono<EncodedMessage> encode(MessageDecodeContext context){
//根据设备ID作为key进行计算
long delay = intervalHelper.next(context.getDevice().getDeviceId());
EncodedMessage msg = doEncode(context);
return delay > 0
? Mono.delay(Duration.ofMillis(delay)).thenReturn(msg)
: Mono.just(msg)
}
| 构造器和说明 |
|---|
ParallelIntervalHelper() |
| 限定符和类型 | 方法和说明 |
|---|---|
static ParallelIntervalHelper |
create(java.time.Duration interval) |
long |
current(String key)
获取当前的间隔(毫秒),如果上一次与本次获取的时间超过间隔则返回0
|
reactor.core.publisher.Mono<Void> |
delay(String key)
根据key返回延迟
Mono |
<T> reactor.core.publisher.Flux<T> |
delay(String key,
reactor.core.publisher.Flux<T> source)
尝试对
Flux进行延迟操作 |
<T> reactor.core.publisher.Mono<T> |
delay(String key,
reactor.core.publisher.Mono<T> source)
尝试对
Mono进行延迟操作 |
<S> S |
delay(String key,
S source,
java.util.function.BiFunction<S,java.time.Duration,S> mapper)
根据key和指定的数据进行延迟转换,如果不存在延迟则直接返回源数据
|
long |
next(String key)
获取下一次的间隔(毫秒),如果上一次与本次获取的时间超过间隔则返回0
|
public static ParallelIntervalHelper create(java.time.Duration interval)
public long next(@Nonnull String key)
key - keypublic long current(@Nonnull String key)
key - keypublic <T> reactor.core.publisher.Flux<T> delay(@Nonnull String key, @Nonnull reactor.core.publisher.Flux<T> source)
Flux进行延迟操作T - Flux泛型类型key - keysource - Fluxpublic <T> reactor.core.publisher.Mono<T> delay(@Nonnull String key, @Nonnull reactor.core.publisher.Mono<T> source)
Mono进行延迟操作T - Mono泛型类型key - keysource - Monopublic reactor.core.publisher.Mono<Void> delay(@Nonnull String key)
Monokey - keypublic <S> S delay(@Nonnull String key, S source, java.util.function.BiFunction<S,java.time.Duration,S> mapper)
S - 数据类型key - keysource - 源数据mapper - 转换器Copyright © 2019–2022. All rights reserved.