Gateway 转发 dubbo协议的问题

Gateway 转发 dubbo协议的问题

老师,我在通过gateway请求 dubbo的provider, 总是提示在nacos上找不到注册信息
但是nacos是能找到的, 不然 test case 不会通过, debug 过程中的记录没有问题
下面给出打印出来的log和error信息, 以及 nacos信息:

2025-11-28 18:52:47.584  INFO 22844 --- [nio-6101-exec-5] c.m.b.g.f.HttpRequestToDubboInvokeFilter : dobbuUri: org.cy.micoservice.blog.user.facade.interfaces.UserFacade, dobbUriArray: queryUserById
2025-11-28 18:52:47.621 ERROR 22844 --- [nio-6101-exec-5] a.w.r.e.AbstractErrorWebExceptionHandler : [338e7c9e]  500 Server Error for HTTP GET "/api/test/dubbo/user"

org.apache.dubbo.rpc.RpcException: No provider available from registry 192.168.9.200:8848 for service org.cy.micoservice.blog.user.facade.interfaces.UserFacade on consumer 198.18.0.1 use dubbo version 3.2.0, please check status of providers(disabled, not registered or in blacklist).
	at org.apache.dubbo.registry.integration.DynamicDirectory.doList(DynamicDirectory.java:199) ~[dubbo-3.2.0.jar:3.2.0]
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
	*__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
	*__checkpoint ⇢ HTTP GET "/api/test/dubbo/user" [ExceptionHandlingWebHandler]

图片描述

图片描述

但是test case 能通过, 也能返回值:
图片描述

问题二: DubboInvokeService 中的 save() 方法: 在启动gateway也是类似的错误, 查了资料说 需要 referenceConfig.setCheck(false); 这样 referenceConfig.get(); 方法不会立即触发校验Facade 是否在nacos注册, 但是感觉治标不治本

@Override
  public boolean save(String uri) {
    if (StringUtils.isBlank(uri)) return false;
    log.info("dubbo uri: {}", uri);

    ReferenceConfig<GenericService> referenceConfig = new ReferenceConfig<>();
    referenceConfig.setRegistry(registryConfig);

    // 开启泛化调用
    referenceConfig.setGeneric(true);
    referenceConfig.setApplication(applicationConfig);
    referenceConfig.setInterface(uri);
		// 不立即检查Facade是否存在
    referenceConfig.setCheck(false);
    GenericService genericService = referenceConfig.get();
    referenceConfigMap.put(uri, genericService);
    return true;
  }

正在回答

登陆购买课程后可参与讨论,去登陆

2回答
一般nacos上找不到方法 可能是dubbo配置nacos地址的时候 账号密码 组别 命名空间这些有出入导致的。
Danny_Idea 5天前
问题二其实应该要设置为check为false 因为网关作为一个中台服务 不应该前依赖于下游业务服务,即使下游服务挂了,也不应该影响网关这边的其他运作。
  • 提问者 Screenly #1

    解决了, 但是发现提问的问题不能关闭了,dubbo服务注册nacos的namespace错了,少了个-dev

    5天前
  • Danny_Idea 回复 提问者 Screenly #2

    👍👍👍👍

    5天前
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java+大数据+AI架构师实战营
  • 参与学习       55    人

专为1–5年开发者,打造极具竞争力的人才培养方案,快速突破技术/职业瓶颈 “三高”架构稳态托底,海量数据秒级吞吐,实时计算,AI智能化融合 大型 “社交+电商” 平台从0到1全程贯穿,高复杂架构落地

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师