exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("https://" + newTargetURLHost + )
newTarget = serviceReturnsMono.getServerMapping(id).block().getHost();
Mono.just(serviceReturnsMono.getServerMapping(id))
.flatMap(flat -> flat)
.subscribeOn(Schedulers.immediate())
.map(server -> exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("https://" + server.getHost() ))
.subscribe();
执行上述代码时,exchange属性不会发生变异。
我也尝试过以下方法,但没有成功:
serverMappingMono
.map(serverMapping -> exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("https://" + serverMapping.getHost() ))
.subscribe();
作为一个测试,当我按照下面的方式修改代码以排除故障时,下面的代码确实会发出一个硬编码字符串,并且exchange属性发生了变化。
.map(server -> exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("https://" + "testHostName" ))
.subscribe();
private ReturnsMonoServerMappingService returnsMonoServerMappingService;
@Override
public int getOrder() {
return 10001;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
final String id = exchange.getRequest().getHeaders().getFirst("reference");
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
Mono<ServerMapping> serverMapping = returnsMonoServerMappingService.getServerMapping(id);
serverMapping
.map(server -> exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, URI.create("https://" + server.getHost() )))
.subscribe();
}));
}
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
final String id = exchange.getRequest()
.getHeaders()
.getFirst("reference");
return returnsMonoServerMappingService.getServerMapping(id)
.doOnSuccess(serverMapping -> {
exchange.getAttributes()
.put(GATEWAY_REQUEST_URL_ATTR, URI.create("https://" + server.getHost()
}).then(chain.filter(exchange));
}
我在我的手机上写这个,所以不能测试它,我从记忆中写,但它应该是这样的东西,我想。或者至少你明白了要旨。
我们首先提取ID。然后我们查找servermapping,如果进行顺利,我们将其作为一个属性,然后继续筛选器链。
您几乎不应该在应用程序中订阅,调用客户端通常是订阅方。并且永远不要在反应性应用程序中阻塞。
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
final String id = exchange.getRequest()
.getHeaders()
.getFirst("reference");
return returnsMonoServerMappingService.getServerMapping(id)
.doOnSuccess(serverMapping -> {
exchange.getAttributes()
.put(GATEWAY_REQUEST_URL_ATTR, URI.create("https://" + server.getHost()
}).then(chain.filter(exchange));
}
FlatMap FlatMap将一个发射数据的Observable变换为多个Observables,然后将它们发射的数据合并后放进一个单独的Observable FlatMap操作符使用一个指定的函数对原始Observable发射的每一项数据执行变换操作,这个函数返回一个本身也发射数据的Observable,然后FlatMap合并这些Observables发射的数据,最后将合并后的结果当做它自己的
Map 对Observable发射的每一项数据应用一个函数,执行变换操作 Map操作符对原始Observable发射的每一项数据应用一个你选择的函数,然后返回一个发射这些结果的Observable。 RxJava将这个操作符实现为map函数。这个操作符默认不在任何特定的调度器上执行。 Javadoc: map(Func1)) cast cast操作符将原始Observable发射的每一项数据都强制
22.4. 建模CCI访问为操作对象 org.springframework.jca.cci.object 包中包含的支持类允许你以另一种风格访问EIS: 通过可重用的操作对象,类似于Spring的JDBC操作对象(参见JDBC一章)。 它通常都封装了 CCI 的API:将应用级的输入对象传入到操作对象, 从而它能创建输入record然后转换接收到的record数据到一个应用级输出对象并返回它。
我正在集群中使用hazelcast-2.5。我有一个映射(键:字符串,值:用户定义对象的ArrayList)。我可以在大多数地方put/remove fine,但在代码的一个特定部分,put操作会无声无息地失败(用于put操作的键字符串是唯一的,ArrayList也不是空的)。不会引发异常。如果涉及锁,我甚至尝试了tryPut,该调用给出了一个真实的返回值。在put操作之后,我尝试打印出映射的ke
对象是一个用于存储数据和元数据的容器。一个容器可以包 含很多对象,但是对象的名字必须唯一。这个 API 允许客 户端创建对象、设置访问权限及元数据、读取对象的数据和 元数据、以及删除对象。因为此 API 发出的请求是与用户 帐户信息相关的,所以此 API 内的所有请求都必须经过认 证,除非容器或对象的访问控制权限被故意设置成了可公开 访问(即允许匿名请求)。 创建或更新对象 要创建新对象,需发送带
内存操作 函数 void * rt_memset (void *s, int c, rt_ubase_t count) 设置内存数据 void * rt_memcpy (void *dst, const void *src, rt_ubase_t count) 复制内存数据 void * rt_memmove (void *dest, const void *src, rt_