|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- package org.springframework.cloud.gateway.route;
- import reactor.core.publisher.Mono;
- /**
- * @author Spencer Gibb
- */
- public interface RouteDefinitionWriter {
- Mono<Void> save(Mono<RouteDefinition> route);
- Mono<Void> delete(Mono<String> routeId);
- }
复制代码
上面是这个接口的代码,默认的实现类是
- /*
- * Copyright 2013-2020 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.springframework.cloud.gateway.route;
- import java.util.LinkedHashMap;
- import java.util.Map;
- import reactor.core.publisher.Flux;
- import reactor.core.publisher.Mono;
- import org.springframework.cloud.gateway.support.NotFoundException;
- import org.springframework.util.ObjectUtils;
- import static java.util.Collections.synchronizedMap;
- /**
- * @author Spencer Gibb
- */
- public class InMemoryRouteDefinitionRepository implements RouteDefinitionRepository {
- private final Map<String, RouteDefinition> routes = synchronizedMap(new LinkedHashMap<String, RouteDefinition>());
- @Override
- public Mono<Void> save(Mono<RouteDefinition> route) {
- return route.flatMap(r -> {
- if (ObjectUtils.isEmpty(r.getId())) {
- return Mono.error(new IllegalArgumentException("id may not be empty"));
- }
- routes.put(r.getId(), r);
- return Mono.empty();
- });
- }
- @Override
- public Mono<Void> delete(Mono<String> routeId) {
- return routeId.flatMap(id -> {
- if (routes.containsKey(id)) {
- routes.remove(id);
- return Mono.empty();
- }
- return Mono.defer(() -> Mono.error(new NotFoundException("RouteDefinition not found: " + routeId)));
- });
- }
- @Override
- public Flux<RouteDefinition> getRouteDefinitions() {
- Map<String, RouteDefinition> routesSafeCopy = new LinkedHashMap<>(routes);
- return Flux.fromIterable(routesSafeCopy.values());
- }
- }
复制代码
我看网上很多文章在调用 save方法添加路由的时候,调用了subscribe
- routeDefinitionWriter.save(Mono.just(definition)).subscribe();
复制代码
但是在调用delete方法删除路由的时候,没有调用subscribe
- this.routeDefinitionWriter.delete(Mono.just(definition.getId()));
- this.routeDefinitionWriter.save(Mono.just(definition)).subscribe();
复制代码
这是为什么啊?响应式流不是在调用subscribe之后才可以执行吗? |
|