基于nginx部署gateway集群
1、将网关项目多个部署启动
例如:
网关1 127.0.0.1:81
网关1 127.0.0.1:82
3、各个微服务如何知道是哪个网关请求的
在网关的过滤器中给请求头添加可以区别网关的信息。
动态Gateway
动态网关:任何配置都实现不用重启网关服务器都可以及时刷新。
实现思路:
1、分布式配置中心,阅读性差。
2、基于数据库表结构设计。
gateway提供对应的接口:1、直接新增路由;2、直接修改路由
使用api添加gateway 路由,直接注入该bean 调用 loadRoute1方法就可以添加路由策略了。
-
@Service
-
public
class
GatewayService
implements
ApplicationEventPublisherAware {
-
private
ApplicationEventPublisher publisher;
-
@Autowired
-
private
RouteDefinitionWriter routeDefinitionWriter;
-
-
@Override
-
public
void
setApplicationEventPublisher(
ApplicationEventPublisher applicationEventPublisher) {
-
this.
publisher = applicationEventPublisher;
-
}
-
-
public
void
initAllRoute(
) {
-
// 从数据库查询配置的网关配置
-
List<
GatewayRouteEntity> gateWayEntities = gatewayRouteMapper.
gateWayAll();
-
for (
GatewayRouteEntity gw :
-
gateWayEntities) {
-
loadRoute(gw);
-
}
-
-
}
-
-
public
String
loadRoute1(
) {
-
RouteDefinition definition =
new
RouteDefinition();
-
Map<
String,
String> predicateParams =
new
HashMap<>(
8);
-
PredicateDefinition predicate =
new
PredicateDefinition();
-
FilterDefinition filterDefinition =
new
FilterDefinition();
-
Map<
String,
String> filterParams =
new
HashMap<>(
8);
-
// 如果配置路由type为0的话 则从注册中心获取服务
-
URI uri =
UriComponentsBuilder.
fromUriString(
"lb://kaico-member/").
build().
toUri();
-
// 定义的路由唯一的id
-
definition.
setId(
"member");
-
predicate.
setName(
"Path");
-
//路由转发地址
-
predicateParams.
put(
"pattern",
"/member/**");
-
predicate.
setArgs(predicateParams);
-
-
// 名称是固定的, 路径去前缀
-
filterDefinition.
setName(
"StripPrefix");
-
filterParams.
put(
"_genkey_0",
"1");
-
filterDefinition.
setArgs(filterParams);
-
definition.
setPredicates(
Arrays.
asList(predicate));
-
definition.
setFilters(
Arrays.
asList(filterDefinition));
-
definition.
setUri(uri);
-
routeDefinitionWriter.
save(
Mono.
just(definition)).
subscribe();
-
this.
publisher.
publishEvent(
new
RefreshRoutesEvent(
this));
-
return
"success";
-
}
-
-
}
-
使用数据库实现动态路由
根据上面的案例,将配置信息添加到数据库中(数据库表的设计只要符合只用场景就可以了,没有什么特别要求),在调用相关的api添加到gateway中即可。
参考学习文档:https://www.cnblogs.com/crazymakercircle/p/11704077.html
官放文档:https://docs.spring.io/spring-cloud-gateway/docs/3.0.5-SNAPSHOT/reference/html/#gateway-starter
转载:https://blog.csdn.net/qq_19734597/article/details/127363021
查看评论