开发者社区 > 云原生 > 正文

控制台无法接入springcloud gateway api

控制台无法接入我本机springcloud gateway网关服务

pom.xml

org.springframework.boot spring-boot-starter-parent 2.2.5.RELEASE com.alibaba.csp sentinel-spring-cloud-gateway-adapter 1.7.0 com.alibaba.csp sentinel-transport-simple-http 1.7.0 com.alibaba fastjson 1.2.9

java配置

@Configuration public class GatewayConfiguration {

private final List<ViewResolver> viewResolvers;
private final ServerCodecConfigurer serverCodecConfigurer;

public GatewayConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider,
                            ServerCodecConfigurer serverCodecConfigurer) {
    this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
    this.serverCodecConfigurer = serverCodecConfigurer;
}

@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() {
    // Register the block exception handler for Spring Cloud Gateway.
    return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);
}

@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public GlobalFilter sentinelGatewayFilter() {
    return new SentinelGatewayFilter();
}

@PostConstruct
public void doInit() {
    initCustomizedApis();
    initGatewayRules();
}

private void initCustomizedApis() {
    Set<ApiDefinition> definitions = new HashSet<>();
    ApiDefinition api1 = new ApiDefinition("some_customized_api")
            .setPredicateItems(new HashSet<ApiPredicateItem>() {{

// add(new ApiPathPredicateItem().setPattern("/ahas")); add(new ApiPathPredicateItem().setPattern("/service-decision-manage/") .setMatchStrategy(SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX)); }}); ApiDefinition api2 = new ApiDefinition("another_customized_api") .setPredicateItems(new HashSet() {{ add(new ApiPathPredicateItem().setPattern("/") .setMatchStrategy(SentinelGatewayConstants.URL_MATCH_STRATEGY_PREFIX)); }}); definitions.add(api1); definitions.add(api2); GatewayApiDefinitionManager.loadApiDefinitions(definitions); }

private void initGatewayRules() {
    Set<GatewayFlowRule> rules = new HashSet<>();
    rules.add(new GatewayFlowRule("some_customized_api")
            .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_CUSTOM_API_NAME)
            .setCount(5)
            .setIntervalSec(1)
            .setParamItem(new GatewayParamFlowItem()
                    .setParseStrategy(SentinelGatewayConstants.PARAM_PARSE_STRATEGY_URL_PARAM)
                    .setFieldName("pnnnnn")
            )
    );
    GatewayRuleManager.loadRules(rules);
}

}

启动参数

java -Dcsp.sentinel.api.port=7979 -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.1.jar

csp.sentinel.api.port 我感觉这个启动参数没用,因为当我启动之后,我在控制台只能看到本地7981的端口,这和你们官方文档上说的默认端口8719也是不一致的

提问148.jpeg

macos catalina 10.15

原提问者GitHub用户sc2885112

展开
收起
云上静思 2023-05-19 16:29:58 213 0
1 条回答
写回答
取消 提交回答
  • 因为-Dcsp.sentinel.api.port=7979命令行指定了这个参数项,表示应用端的Sentinel传输端口为7979,就不会使用默认端口8719了。 在控制台看到的是端口号是7981,估计是你指定的7979端口已被其它程序占用,如果端口被占用Sentinel会尝试端口号加1,直到找到一个可用的端口。

    网关应用接入控制台,启动参数还需要增加:-Dcsp.sentinel.app.type=1,用于标识它为网关应用。

    具体可以参考文档: https://github.com/alibaba/Sentinel/wiki/网关限流#网关流控控制台 https://github.com/alibaba/Sentinel/wiki/FAQ#q-sentinel-控制台没有显示我的应用或者没有监控展示如何排查

    原回答者GitHub用户cdfive

    2023-05-19 22:43:38
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Java Spring Boot开发实战系列课程【第15讲】:Spring Boot 2.0 API与Spring REST Docs实战 立即下载
Spring Boot2.0实战Redis分布式缓存 立即下载
DTS控制台一本通 立即下载