Mono.delay(Duration.ofMillis(10)).map(d -> {
System.out.println(d);
return d;
}).block();
Run Code Online (Sandbox Code Playgroud)
输出:0
当我使用subscribe()或subscribe(-)方法而不是调用时,无法在控制台上看到任何输出block()
Mono.delay(Duration.ofMillis(10)).map(d -> {
System.out.println(d);
return d;
}).subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
doOnSubscribe(-)难道我们只需要在这个方法之后使用吗Mono.delay(-)?
Mono.delay(Duration.ofMillis(10)).doOnSubscribe(s -> {
System.out.println("its printing doOnSubscribe");
}).map(d -> {
System.out.println(d);
return d;
}).subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
输出它正在打印doOnSubscribe
什么是事件驱动设计和领域驱动设计?
在微服务中使用领域驱动设计、事件驱动设计有什么具体好处。
JedisConnectionFactory jedisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
Run Code Online (Sandbox Code Playgroud)
情况1:使用RedisCacheWriter
public RedisCacheManager getRedisCacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheWriter cacheWriter = RedisCacheWriter.lockingRedisCacheWriter(connectionFactory);
ClassLoader loader = this.getClass().getClassLoader();
JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader);
SerializationPair<Object> pair = SerializationPair.fromSerializer(jdkSerializer);
RedisCacheConfiguration cacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(3600));
Map<String, RedisCacheConfiguration> initialCacheConfigurations = new HashMap<>();
initialCacheConfigurations.put("order",cacheConfig.entryTtl(Duration.ofSeconds(1600)));
RedisCacheManager cacheManager = new RedisCacheManager(cacheWriter, cacheConfig,initialCacheConfigurations);
return cacheManager;
}
@Bean
public CacheManager cacheManager() {
RedisCacheManager cacheManager=getRedisCacheManager(jedisConnectionFactory());
log.info("CacheManager created ");
return cacheManager;
}
Run Code Online (Sandbox Code Playgroud)
情况2:RedisTemplate
@Bean
RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> …Run Code Online (Sandbox Code Playgroud) public class Source1 {
private String name; //srihari
private List<String> city_names; //city_names.add("hyderabad-india")
}
public class Soruce2 {
private String name;
private String city_name; //hyderabad-india
private List<String> technologies; //Arrays.asList("java","mapstruct")
}
public class Target {
private String name; // Result: srihari
private String city_names; // Result: hyderabad-india
private String technologies; // Result: java, mapstruct
}`
Run Code Online (Sandbox Code Playgroud)
list 只有一个值意味着 list.size()=1。如果 source1 名称为空,则必须从 source2 中获取。并且目标应包含所有字段,即使这些字段在一个源中不可用
简单的例子来理解线程流程。
[ gshp subscribedOn-1 ] INFOreactor.Flux.FlatMap.1 -onSubscribe ( FluxFlatMap.FlatMapMain )
[ gshppublishOn-7 ] INFOreactor.Flux.FlatMap.1 - onNext(6)
这里reactor.Flux.FlatMap.1对于gshp subscribedOn-1和gshppublishOn-7是通用的
当我们运行java时,它从主线程开始,之后会发生什么,它会创建gshp subscribedOn-1还是reactor.Flux.FlatMap.1?
@Test
public void setUpTestTest() {
Scheduler scheduler1 = Schedulers.newParallel("gshp subscribedOn", 3);
Scheduler scheduler2 = Schedulers.newParallel("gshp publishOn", 6);
Flux<String> flux = Flux.range(1, 200)
.flatMap(s-> Flux.just(""+s)
.publishOn(scheduler2)
.concatMap(d->processMessagefluxpause(d, "test")))
.log()
.subscribeOn(scheduler1);
StepVerifier.create(flux).expectNextCount(20).verifyComplete();
}
Run Code Online (Sandbox Code Playgroud)