apache / dubbo

The java implementation of Apache Dubbo. An RPC and microservice framework.
https://dubbo.apache.org/
Apache License 2.0
40.44k stars 26.42k forks source link

java.lang.RuntimeException: publish nacos metadata failed #11726

Closed chenglutao closed 1 year ago

chenglutao commented 1 year ago

版本号 dubbo.version 3.1.7 spring-boot.version 2.3.12.RELEASE spring-cloud.version Hoxton.SR12 spring-cloud-alibaba.version 2.2.10-RC1 nacos-client version 2.2.0 nacos-server version 2.2.0 nacos-all 通过SPI机制注入数据源:postgresql

依赖 spring-cloud-starter-alibaba-nacos-discovery dubbo-spring-boot-starter

问题点 1:若不配置 use-as-config-center: false use-as-metadata-center: false 则报错标题的异常 问题点 2:若不使用postgresql数据库,使用mysql或derby 不配置use-as-config-center、 use-as-metadata-center可正常启动, postgresql 扩展数据源插件代码不存在问题已排除数据库源插件代码疑问点 问题点3: 我理解无论是那些数据源mysql、postgresql 对于Dubbo而言都会默认将注册中心的实例同时作为配置中心和元数据中心,但不知道为什么postgresql使用默认配置 use-as-config-center: true use-as-metadata-center: true 就报错

yml配置 spring: application: name: rpc server: port: 9001 dubbo: application: name: rpc registry: address: nacos://localhost:8848?username=nacos&password=nacos protocol: name: dubbo port: -1

nacos配置为默认配置

server.servlet.contextPath=/nacos server.error.include-message=ALWAYS server.port=8848 spring.datasource.platform=postgresql db.num=1 db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos_config?reWriteBatchedInserts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false db.user.0=postgres db.password.0=123456 db.pool.config.driverClassName=org.postgresql.Driver db.pool.config.connectionTimeout=30000 db.pool.config.validationTimeout=10000 db.pool.config.maximumPoolSize=20 db.pool.config.minimumIdle=2 management.metrics.export.elastic.enabled=false management.metrics.export.influx.enabled=false server.tomcat.accesslog.enabled=true server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i server.tomcat.basedir=file:. nacos.security.ignore.urls=/,/error,//*.css,/*/.js,//*.html,//*.map,/*/.svg,//*.png,/*/.ico,/console-ui/public/,/v1/auth/,/v1/console/health/,/actuator/,/v1/console/server/** nacos.core.auth.system.type=nacos nacos.core.auth.enabled=false nacos.core.auth.caching.enabled=true nacos.core.auth.enable.userAgentAuthWhite=false nacos.core.auth.server.identity.key=serverIdentity nacos.core.auth.server.identity.value=security nacos.core.auth.plugin.nacos.token.expire.seconds=18000 nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 nacos.istio.mcp.server.enabled=false

异常信息:

22023-03-05 12:09:02.905 INFO 5284 --- [ main] o.a.dubbo.registry.nacos.NacosRegistry : [DUBBO] Subscribe: provider://172.0.4.184:20880/xxx.service.DemoService?anyhost=true&application=rpc&background=false&bind.ip=172.0.4.184&bind.port=20880&category=configurators&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=xxx.service.DemoService&methods=abc&pid=5284&qos.enable=true&release=3.1.7&service-name-mapping=true&side=provider&timestamp=1677989338696, dubbo version: 3.1.7, current host: 172.0.4.184 2023-03-05 12:09:02.930 WARN 5284 --- [ main] o.a.dubbo.registry.nacos.NacosRegistry : [DUBBO] Ignore empty notify urls for subscribe url provider://172.0.4.184:20880/xxx.service.DemoService?anyhost=true&application=rpc&background=false&bind.ip=172.0.4.184&bind.port=20880&category=configurators&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=xxx.service.DemoService&methods=abc&pid=5284&qos.enable=true&release=3.1.7&service-name-mapping=true&side=provider&timestamp=1677989338696, dubbo version: 3.1.7, current host: 172.0.4.184, error code: 1-4. This may be caused by , go to https://dubbo.apache.org/faq/1/4 to find instructions. 2023-03-05 12:09:02.938 WARN 5284 --- [ main] o.a.dubbo.registry.nacos.NacosRegistry : [DUBBO] Ignore empty notify urls for subscribe url provider://172.0.4.184:20880/xxx.service.DemoService?anyhost=true&application=rpc&background=false&bind.ip=172.0.4.184&bind.port=20880&category=configurators&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=xxx.service.DemoService&methods=abc&pid=5284&qos.enable=true&release=3.1.7&service-name-mapping=true&side=provider&timestamp=1677989338696, dubbo version: 3.1.7, current host: 172.0.4.184, error code: 1-4. This may be caused by , go to https://dubbo.apache.org/faq/1/4 to find instructions. 2023-03-05 12:09:02.953 INFO 5284 --- [ main] o.a.d.m.d.TypeDefinitionBuilder : [DUBBO] Throw classNotFound (com/google/protobuf/GeneratedMessageV3) in class org.apache.dubbo.metadata.definition.protobuf.ProtobufTypeBuilder, dubbo version: 3.1.7, current host: 172.0.4.184 2023-03-05 12:09:02.956 INFO 5284 --- [ main] org.apache.dubbo.config.ServiceConfig : [DUBBO] Try to register interface application mapping for service xxx.service.DemoService, dubbo version: 3.1.7, current host: 172.0.4.184 2023-03-05 12:09:02.956 INFO 5284 --- [Report-thread-1] o.a.d.m.store.nacos.NacosMetadataReport : [DUBBO] store provider metadata. Identifier : org.apache.dubbo.metadata.report.identifier.MetadataIdentifier@210f382b; definition: FullServiceDefinition{parameters=org.apache.dubbo.common.url.component.URLParam$URLParamMap@e2721086} ServiceDefinition [canonicalName=xxx.service.DemoService, codeSource=file:/G:/xxx/target/classes/, methods=[MethodDefinition [name=abc, parameterTypes=[], returnType=java.lang.String]]], dubbo version: 3.1.7, current host: 172.0.4.184 2023-03-05 12:09:02.981 INFO 5284 --- [ main] o.a.d.r.c.m.MetadataServiceNameMapping : [DUBBO] Failed to publish service name mapping to metadata center by cas operation. Times: 1. Next retry delay: 98. Service Interface: xxx.service.DemoService. Origin Content: null. Ticket: 0. Excepted context: rpc, dubbo version: 3.1.7, current host: 172.0.4.184 2023-03-05 12:09:03.012 ERROR 5284 --- [Report-thread-1] o.a.d.m.store.nacos.NacosMetadataReport : [DUBBO] Failed to put org.apache.dubbo.metadata.report.identifier.MetadataIdentifier@210f382b to nacos {"annotations":[],"canonicalName":"xxx.service.DemoService","codeSource":"file:/G:/xxx/target/classes/","methods":[{"annotations":[],"name":"abc","parameterTypes":[],"parameters":[],"returnType":"java.lang.String"}],"parameters":{"pid":"5284","anyhost":"true","interface":"xxx.service.DemoService","side":"provider","application":"rpc","dubbo":"2.0.2","release":"3.1.7","bind.ip":"172.0.4.184","methods":"abc","background":"false","deprecated":"false","dynamic":"true","service-name-mapping":"true","qos.enable":"true","generic":"false","bind.port":"20880","timestamp":"1677989338696"},"types":[{"enums":[],"items":[],"properties":{},"type":"java.lang.String"}],"uniqueId":"xxx.service.DemoService@file:/G:/xxx/target/classes/"}, cause: publish nacos metadata failed, dubbo version: 3.1.7, current host: 172.0.4.184, error code: 1-37. This may be caused by , go to https://dubbo.apache.org/faq/1/37 to find instructions.

java.lang.RuntimeException: publish nacos metadata failed at org.apache.dubbo.metadata.store.nacos.NacosMetadataReport.storeMetadata(NacosMetadataReport.java:387) [dubbo-3.1.7.jar:3.1.7] at org.apache.dubbo.metadata.store.nacos.NacosMetadataReport.doStoreProviderMetadata(NacosMetadataReport.java:224) [dubbo-3.1.7.jar:3.1.7] at org.apache.dubbo.metadata.report.support.AbstractMetadataReport.storeProviderMetadataTask(AbstractMetadataReport.java:283) [dubbo-3.1.7.jar:3.1.7] at org.apache.dubbo.metadata.report.support.AbstractMetadataReport.lambda$storeProviderMetadata$0(AbstractMetadataReport.java:271) [dubbo-3.1.7.jar:3.1.7] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_331] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_331] at java.lang.Thread.run(Thread.java:750) ~[na:1.8.0_331]

2023-03-05 12:09:03.013 ERROR 5284 --- [Report-thread-1] o.a.d.m.store.nacos.NacosMetadataReport : [DUBBO] Failed to put provider metadata org.apache.dubbo.metadata.report.identifier.MetadataIdentifier@210f382b in FullServiceDefinition{parameters=org.apache.dubbo.common.url.component.URLParam$URLParamMap@e2721086} ServiceDefinition [canonicalName=xxx.service.DemoService, codeSource=file:/G:/xxx/target/classes/, methods=[MethodDefinition [name=abc, parameterTypes=[], returnType=java.lang.String]]], cause: Failed to put org.apache.dubbo.metadata.report.identifier.MetadataIdentifier@210f382b to nacos {"annotations":[],"canonicalName":"xxx.service.DemoService","codeSource":"file:/G:/xxx/target/classes/","methods":[{"annotations":[],"name":"abc","parameterTypes":[],"parameters":[],"returnType":"java.lang.String"}],"parameters":{"pid":"5284","anyhost":"true","interface":"xxx.service.DemoService","side":"provider","application":"rpc","dubbo":"2.0.2","release":"3.1.7","bind.ip":"172.0.4.184","methods":"abc","background":"false","deprecated":"false","dynamic":"true","service-name-mapping":"true","qos.enable":"true","generic":"false","bind.port":"20880","timestamp":"1677989338696"},"types":[{"enums":[],"items":[],"properties":{},"type":"java.lang.String"}],"uniqueId":"xxx.service.DemoService@file:/G:/xxx/target/classes/"}, cause: publish nacos metadata failed, dubbo version: 3.1.7, current host: 172.0.4.184, error code: 3-2. This may be caused by , go to https://dubbo.apache.org/faq/3/2 to find instructions.

java.lang.RuntimeException: Failed to put org.apache.dubbo.metadata.report.identifier.MetadataIdentifier@210f382b to nacos {"annotations":[],"canonicalName":"xxx.service.DemoService","codeSource":"file:/G:/xxx/target/classes/","methods":[{"annotations":[],"name":"abc","parameterTypes":[],"parameters":[],"returnType":"java.lang.String"}],"parameters":{"pid":"5284","anyhost":"true","interface":"xxx.service.DemoService","side":"provider","application":"rpc","dubbo":"2.0.2","release":"3.1.7","bind.ip":"172.0.4.184","methods":"abc","background":"false","deprecated":"false","dynamic":"true","service-name-mapping":"true","qos.enable":"true","generic":"false","bind.port":"20880","timestamp":"1677989338696"},"types":[{"enums":[],"items":[],"properties":{},"type":"java.lang.String"}],"uniqueId":"xxx.service.DemoService@file:/G:/xxx/target/classes/"}, cause: publish nacos metadata failed at org.apache.dubbo.metadata.store.nacos.NacosMetadataReport.storeMetadata(NacosMetadataReport.java:391) ~[dubbo-3.1.7.jar:3.1.7] at org.apache.dubbo.metadata.store.nacos.NacosMetadataReport.doStoreProviderMetadata(NacosMetadataReport.java:224) ~[dubbo-3.1.7.jar:3.1.7] at org.apache.dubbo.metadata.report.support.AbstractMetadataReport.storeProviderMetadataTask(AbstractMetadataReport.java:283) [dubbo-3.1.7.jar:3.1.7] at org.apache.dubbo.metadata.report.support.AbstractMetadataReport.lambda$storeProviderMetadata$0(AbstractMetadataReport.java:271) [dubbo-3.1.7.jar:3.1.7] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_331] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_331] at java.lang.Thread.run(Thread.java:750) ~[na:1.8.0_331] Caused by: java.lang.RuntimeException: publish nacos metadata failed at org.apache.dubbo.metadata.store.nacos.NacosMetadataReport.storeMetadata(NacosMetadataReport.java:387) ~[dubbo-3.1.7.jar:3.1.7]

chenglutao commented 1 year ago

his_config_info中gmt_create为非空字段,在mysql中默认值是当前时间戳CURRENT_TIMESTAMP his_config_info字段gmt_create在postgresql也要设置为默认值当前时间戳CURRENT_TIMESTAMP

nacos源码 com.alibaba.nacos.config.server.service.repository.extrnal.ExternalHistoryConfigInfoPersistServiceImpl

@Override
public void insertConfigHistoryAtomic(long id, ConfigInfo configInfo, String srcIp, String srcUser,
        final Timestamp time, String ops) {
    String appNameTmp = StringUtils.isBlank(configInfo.getAppName()) ? StringUtils.EMPTY : configInfo.getAppName();
    String tenantTmp = StringUtils.isBlank(configInfo.getTenant()) ? StringUtils.EMPTY : configInfo.getTenant();
    final String md5Tmp = MD5Utils.md5Hex(configInfo.getContent(), Constants.ENCODE);
    String encryptedDataKey = StringUtils.isBlank(configInfo.getEncryptedDataKey()) ? StringUtils.EMPTY
            : configInfo.getEncryptedDataKey();

    try {
        HistoryConfigInfoMapper historyConfigInfoMapper = mapperManager.findMapper(
                dataSourceService.getDataSourceType(), TableConstant.HIS_CONFIG_INFO);
        jt.update(historyConfigInfoMapper.insert(
                        Arrays.asList("id", "data_id", "group_id", "tenant_id", "app_name", "content", "md5", "src_ip",
                                "src_user", "gmt_modified", "op_type", "encrypted_data_key")), id, configInfo.getDataId(),
                configInfo.getGroup(), tenantTmp, appNameTmp, configInfo.getContent(), md5Tmp, srcIp, srcUser, time,
                ops, encryptedDataKey);
    } catch (DataAccessException e) {
        LogUtil.FATAL_LOG.error("[db-error] " + e, e);
        throw e;
    }
}

config-fatal.log 异常日志 org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT INTO his_config_info(id, data_id, group_id, tenant_id, app_name, content, md5, src_ip, src_user, gmt_modified, op_type, encrypted_data_key) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)]; 错误: 在字段 "gmt_create" 中空值违反了非空约束 详细:失败, 行包含(0, 4591, com.xxx.modules.service.DemoService, mapping, , rpc, da0fb2ac892daab4810fb781272173c1, null, 2023-03-05 15:50:27.42, null, 172.0.4.184, I , , ).; nested exception is org.postgresql.util.PSQLException: 错误: 在字段 "gmt_create" 中空值违反了非空约束 详细:失败, 行包含(0, 4591, com.xxx.modules.service.DemoService, mapping, , rpc, da0fb2ac892daab4810fb781272173c1, null, 2023-03-05 15:50:27.42, null, 172.0.4.184, I , , ). at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1541) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:667) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:960) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1015) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:1025) at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalHistoryConfigInfoPersistServiceImpl.insertConfigHistoryAtomic(ExternalHistoryConfigInfoPersistServiceImpl.java:111) at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalConfigInfoPersistServiceImpl.lambda$addConfigInfo$0(ExternalConfigInfoPersistServiceImpl.java:156) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalConfigInfoPersistServiceImpl.addConfigInfo(ExternalConfigInfoPersistServiceImpl.java:149) at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalConfigInfoPersistServiceImpl.insertOrUpdateCas(ExternalConfigInfoPersistServiceImpl.java:191) at com.alibaba.nacos.config.server.remote.ConfigPublishRequestHandler.handle(ConfigPublishRequestHandler.java:119) at com.alibaba.nacos.config.server.remote.ConfigPublishRequestHandler.handle(ConfigPublishRequestHandler.java:55) at com.alibaba.nacos.core.remote.RequestHandler.handleRequest(RequestHandler.java:58) at com.alibaba.nacos.core.remote.RequestHandler$$FastClassBySpringCGLIB$$6a0564cd.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) at com.alibaba.nacos.config.server.aspect.RequestLogAspect.logClientRequestRpc(RequestLogAspect.java:215) at com.alibaba.nacos.config.server.aspect.RequestLogAspect.interfacePublishSingleRpc(RequestLogAspect.java:116)