springboot发布dubbo服务注册到nacos

2023-11-03

dubbo注册服务到nacos的pom依赖

理论上只需要2个最核心的依赖

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>${dubbo-spring-boot-starter.version}</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

但是dubbo会用到nacos-apispring-cloud-starter-alibaba-nacos-discovery中依赖的nacos-client版本太低,需要单独指定nacos-client版本,否则在org.apache.dubbo:dubbo中使用nacos-api时会抛NoSuchMethodError,所以在pom中还需要添加

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>${nacos-client.version}</version>
</dependency>
2022-04-05 19:09:39.667  WARN 15740 --- [           main] o.a.d.c.deploy.FrameworkModelCleaner     :  [DUBBO] ExtensionDirector is destroyed, dubbo version: 3.0.6, current host: 192.168.1.4

java.lang.IllegalStateException: ExtensionDirector is destroyed
	at org.apache.dubbo.common.extension.ExtensionDirector.checkDestroyed(ExtensionDirector.java:156) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.common.extension.ExtensionDirector.getExtensionLoader(ExtensionDirector.java:67) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.common.extension.ExtensionAccessor.getExtensionLoader(ExtensionAccessor.java:27) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ScopeModelUtil.getExtensionLoader(ScopeModelUtil.java:102) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.integration.RegistryProtocol.getRegistry(RegistryProtocol.java:391) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.integration.RegistryProtocol$ExporterChangeableWrapper.unexport(RegistryProtocol.java:892) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.integration.RegistryProtocol.destroy(RegistryProtocol.java:636) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.destroy(ProtocolListenerWrapper.java:89) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.qos.protocol.QosProtocolWrapper.destroy(QosProtocolWrapper.java:90) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper.destroy(ProtocolFilterWrapper.java:79) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper.destroy(ProtocolSerializationWrapper.java:57) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.FrameworkModelCleaner.destroyProtocols(FrameworkModelCleaner.java:55) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.FrameworkModelCleaner.destroyFrameworkResources(FrameworkModelCleaner.java:43) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.FrameworkModelCleaner.onDestroy(FrameworkModelCleaner.java:35) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.FrameworkModelCleaner.onDestroy(FrameworkModelCleaner.java:29) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ScopeModel.notifyDestroy(ScopeModel.java:133) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.FrameworkModel.onDestroy(FrameworkModel.java:125) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ScopeModel.destroy(ScopeModel.java:110) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.FrameworkModel.tryDestroy(FrameworkModel.java:257) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ApplicationModel.onDestroy(ApplicationModel.java:277) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ScopeModel.destroy(ScopeModel.java:110) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ApplicationModel.tryDestroy(ApplicationModel.java:351) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ModuleModel.onDestroy(ModuleModel.java:124) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ScopeModel.destroy(ScopeModel.java:110) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onContextClosedEvent(DubboDeployApplicationListener.java:130) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:102) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:45) ~[dubbo-3.0.6.jar:3.0.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1058) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:172) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1021) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.builder.ParentContextCloserApplicationListener$ContextCloserListener.onApplicationEvent(ParentContextCloserApplicationListener.java:94) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.builder.ParentContextCloserApplicationListener$ContextCloserListener.onApplicationEvent(ParentContextCloserApplicationListener.java:82) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1058) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1021) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener$CloseContextOnFailureApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:497) ~[spring-cloud-context-3.1.1.jar:3.1.1]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.context.event.EventPublishingRunListener.failed(EventPublishingRunListener.java:124) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplicationRunListeners.callFailedListener(SpringApplicationRunListeners.java:96) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplicationRunListeners.lambda$failed$7(SpringApplicationRunListeners.java:87) ~[spring-boot-2.6.6.jar:2.6.6]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplicationRunListeners.failed(SpringApplicationRunListeners.java:86) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:790) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.6.jar:2.6.6]
	at com.wen3.dubbonacos.DemoProviderApplication.main(DemoProviderApplication.java:15) ~[classes/:na]

使用dubbo发布rest服务报错

2022-04-05 19:09:48.830 ERROR 15740 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: No such extension org.apache.dubbo.rpc.Protocol by name rest, possible causes: 
(1) rest=org.apache.dubbo.rpc.protocol.rest.RestProtocol:
java.lang.IllegalStateException: Failed to load extension class (interface: interface org.apache.dubbo.rpc.Protocol, class line: rest=org.apache.dubbo.rpc.protocol.rest.RestProtocol) in jar:file:/G:/repository/org/apache/dubbo/dubbo/3.0.6/dubbo-3.0.6.jar!/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol, cause: org/jboss/resteasy/client/jaxrs/ClientHttpEngine
java.lang.IllegalStateException: Failed to load extension class (interface: interface org.apache.dubbo.rpc.Protocol, class line: rest=org.apache.dubbo.rpc.protocol.rest.RestProtocol) in jar:file:/G:/repository/org/apache/dubbo/dubbo/3.0.6/dubbo-3.0.6.jar!/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol, cause: org/jboss/resteasy/client/jaxrs/ClientHttpEngine
	at org.apache.dubbo.common.extension.ExtensionLoader.loadResource(ExtensionLoader.java:1052)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadFromClass(ExtensionLoader.java:1019)
	at org.apache.dubbo.common.extension.ExtensionLoader.lambda$loadDirectory$4(ExtensionLoader.java:1007)
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
	at java.base/java.util.Collections$UnmodifiableMap.forEach(Collections.java:1553)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadDirectory(ExtensionLoader.java:1006)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadDirectory(ExtensionLoader.java:943)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadExtensionClasses(ExtensionLoader.java:931)
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtensionClasses(ExtensionLoader.java:913)
	at org.apache.dubbo.common.extension.ExtensionLoader.getAdaptiveExtensionClass(ExtensionLoader.java:1243)
	at org.apache.dubbo.common.extension.ExtensionLoader.createAdaptiveExtension(ExtensionLoader.java:1231)
	at org.apache.dubbo.common.extension.ExtensionLoader.getAdaptiveExtension(ExtensionLoader.java:713)
	at org.apache.dubbo.config.ServiceConfig.postProcessAfterScopeModelChanged(ServiceConfig.java:154)
	at org.apache.dubbo.config.AbstractConfig.setScopeModel(AbstractConfig.java:395)
	at org.apache.dubbo.config.AbstractConfig.<init>(AbstractConfig.java:117)
	at org.apache.dubbo.config.AbstractMethodConfig.<init>(AbstractMethodConfig.java:103)
	at org.apache.dubbo.config.AbstractInterfaceConfig.<init>(AbstractInterfaceConfig.java:192)
	at org.apache.dubbo.config.AbstractServiceConfig.<init>(AbstractServiceConfig.java:132)
	at org.apache.dubbo.config.ServiceConfigBase.<init>(ServiceConfigBase.java:84)
	at org.apache.dubbo.config.ServiceConfig.<init>(ServiceConfig.java:136)
	at org.apache.dubbo.config.spring.ServiceBean.<init>(ServiceBean.java:56)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
	at com.wen3.dubbonacos.DemoProviderApplication.main(DemoProviderApplication.java:15)
Caused by: java.lang.NoClassDefFoundError: org/jboss/resteasy/client/jaxrs/ClientHttpEngine
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:467)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadResource(ExtensionLoader.java:1048)
	... 45 more
Caused by: java.lang.ClassNotFoundException: org.jboss.resteasy.client.jaxrs.ClientHttpEngine
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 48 more

	at org.apache.dubbo.common.extension.ExtensionLoader.findException(ExtensionLoader.java:747) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:754) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:548) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:523) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.ServiceConfig.findConfiguredPort(ServiceConfig.java:760) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.ServiceConfig.buildUrl(ServiceConfig.java:543) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:398) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:386) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:361) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:233) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServiceInternal(DefaultModuleDeployer.java:338) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServices(DefaultModuleDeployer.java:310) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.start(DefaultModuleDeployer.java:142) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onContextRefreshedEvent(DubboDeployApplicationListener.java:111) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:100) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:45) ~[dubbo-3.0.6.jar:3.0.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.6.jar:2.6.6]
	at com.wen3.dubbonacos.DemoProviderApplication.main(DemoProviderApplication.java:15) ~[classes/:na]

解决403 unknown user错误

dubbo服务注册到nacos,如果nacos开启了权限认证,那么springboot应用的配置文件在写dubbo配置项时,需要指定用户名和密码,如果这样指定是无效的

dubbo:
  registry:
    address: nacos://localhost:8848
    username: nacos
    password: nacos

这样在启动时,dubbonacos注册服务会报403 unknown user的错误。

2022-04-05 19:09:28.389  WARN 15740 --- [           main] o.a.dubbo.registry.nacos.NacosRegistry   :  [DUBBO] Failed to unregister url dubbo://192.168.1.4:20880/org.apache.dubbo.metadata.MetadataService?anyhost=true&application=provider1&background=false&connections=1&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&executes=100&generic=false&group=provider1&interface=org.apache.dubbo.metadata.MetadataService&metadata-type=remote&methods=getMetadataURL,isMetadataService,getExportedURLs,serviceName,version,getSubscribedURLs,getExportedServiceURLs,getMetadataInfo,toSortedStrings,getMetadataInfos,getServiceDefinition&pid=15740&release=3.0.6&revision=3.0.6&service-name-mapping=true&side=provider&timestamp=1649156966499&version=1.0.0 to registry nacos://localhost:8848/org.apache.dubbo.registry.RegistryService?application=provider1&dubbo=2.0.2&group=demo-provider&interface=org.apache.dubbo.registry.RegistryService&pid=15740&qos.enable=false&release=3.0.6&server=localhost on destroy, cause: Failed to unregister dubbo://192.168.1.4:20880/org.apache.dubbo.metadata.MetadataService?anyhost=true&application=provider1&background=false&connections=1&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&executes=100&generic=false&group=provider1&interface=org.apache.dubbo.metadata.MetadataService&metadata-type=remote&methods=getMetadataURL,isMetadataService,getExportedURLs,serviceName,version,getSubscribedURLs,getExportedServiceURLs,getMetadataInfo,toSortedStrings,getMetadataInfos,getServiceDefinition&pid=15740&release=3.0.6&revision=3.0.6&service-name-mapping=true&side=provider&timestamp=1649156966499&version=1.0.0 to registry localhost:8848, cause: Failed to unregister dubbo://192.168.1.4:20880/org.apache.dubbo.metadata.MetadataService?anyhost=true&application=provider1&background=false&connections=1&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&executes=100&generic=false&group=provider1&interface=org.apache.dubbo.metadata.MetadataService&metadata-type=remote&methods=getMetadataURL,isMetadataService,getExportedURLs,serviceName,version,getSubscribedURLs,getExportedServiceURLs,getMetadataInfo,toSortedStrings,getMetadataInfos,getServiceDefinition&pid=15740&release=3.0.6&revision=3.0.6&service-name-mapping=true&side=provider&timestamp=1649156966499&version=1.0.0 to nacos nacos://localhost:8848/org.apache.dubbo.registry.RegistryService?application=provider1&dubbo=2.0.2&group=demo-provider&interface=org.apache.dubbo.registry.RegistryService&pid=15740&qos.enable=false&release=3.0.6&server=localhost, cause: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: ErrCode:403, ErrMsg:<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Tue Apr 05 19:09:28 CST 2022</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>, dubbo version: 3.0.6, current host: 192.168.1.4

java.lang.IllegalStateException: Failed to unregister dubbo://192.168.1.4:20880/org.apache.dubbo.metadata.MetadataService?anyhost=true&application=provider1&background=false&connections=1&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&executes=100&generic=false&group=provider1&interface=org.apache.dubbo.metadata.MetadataService&metadata-type=remote&methods=getMetadataURL,isMetadataService,getExportedURLs,serviceName,version,getSubscribedURLs,getExportedServiceURLs,getMetadataInfo,toSortedStrings,getMetadataInfos,getServiceDefinition&pid=15740&release=3.0.6&revision=3.0.6&service-name-mapping=true&side=provider&timestamp=1649156966499&version=1.0.0 to registry localhost:8848, cause: Failed to unregister dubbo://192.168.1.4:20880/org.apache.dubbo.metadata.MetadataService?anyhost=true&application=provider1&background=false&connections=1&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&executes=100&generic=false&group=provider1&interface=org.apache.dubbo.metadata.MetadataService&metadata-type=remote&methods=getMetadataURL,isMetadataService,getExportedURLs,serviceName,version,getSubscribedURLs,getExportedServiceURLs,getMetadataInfo,toSortedStrings,getMetadataInfos,getServiceDefinition&pid=15740&release=3.0.6&revision=3.0.6&service-name-mapping=true&side=provider&timestamp=1649156966499&version=1.0.0 to nacos nacos://localhost:8848/org.apache.dubbo.registry.RegistryService?application=provider1&dubbo=2.0.2&group=demo-provider&interface=org.apache.dubbo.registry.RegistryService&pid=15740&qos.enable=false&release=3.0.6&server=localhost, cause: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: ErrCode:403, ErrMsg:<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Tue Apr 05 19:09:28 CST 2022</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>
	at org.apache.dubbo.registry.support.FailbackRegistry.unregister(FailbackRegistry.java:266) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.support.AbstractRegistry.destroy(AbstractRegistry.java:496) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.support.FailbackRegistry.destroy(FailbackRegistry.java:407) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.support.RegistryManager.destroyAll(RegistryManager.java:105) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.destroyRegistries(DefaultApplicationDeployer.java:1009) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.postDestroy(DefaultApplicationDeployer.java:775) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ApplicationModel.onDestroy(ApplicationModel.java:257) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ScopeModel.destroy(ScopeModel.java:110) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ApplicationModel.tryDestroy(ApplicationModel.java:351) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ModuleModel.onDestroy(ModuleModel.java:124) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.rpc.model.ScopeModel.destroy(ScopeModel.java:110) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onContextClosedEvent(DubboDeployApplicationListener.java:130) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:102) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:45) ~[dubbo-3.0.6.jar:3.0.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1058) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:172) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1021) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.builder.ParentContextCloserApplicationListener$ContextCloserListener.onApplicationEvent(ParentContextCloserApplicationListener.java:94) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.builder.ParentContextCloserApplicationListener$ContextCloserListener.onApplicationEvent(ParentContextCloserApplicationListener.java:82) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1058) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1021) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.cloud.bootstrap.BootstrapApplicationListener$CloseContextOnFailureApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:497) ~[spring-cloud-context-3.1.1.jar:3.1.1]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.context.event.EventPublishingRunListener.failed(EventPublishingRunListener.java:124) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplicationRunListeners.callFailedListener(SpringApplicationRunListeners.java:96) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplicationRunListeners.lambda$failed$7(SpringApplicationRunListeners.java:87) ~[spring-boot-2.6.6.jar:2.6.6]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplicationRunListeners.failed(SpringApplicationRunListeners.java:86) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:790) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.6.jar:2.6.6]
	at com.wen3.dubbonacos.DemoProviderApplication.main(DemoProviderApplication.java:15) ~[classes/:na]
Caused by: org.apache.dubbo.rpc.RpcException: Failed to unregister dubbo://192.168.1.4:20880/org.apache.dubbo.metadata.MetadataService?anyhost=true&application=provider1&background=false&connections=1&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&executes=100&generic=false&group=provider1&interface=org.apache.dubbo.metadata.MetadataService&metadata-type=remote&methods=getMetadataURL,isMetadataService,getExportedURLs,serviceName,version,getSubscribedURLs,getExportedServiceURLs,getMetadataInfo,toSortedStrings,getMetadataInfos,getServiceDefinition&pid=15740&release=3.0.6&revision=3.0.6&service-name-mapping=true&side=provider&timestamp=1649156966499&version=1.0.0 to nacos nacos://localhost:8848/org.apache.dubbo.registry.RegistryService?application=provider1&dubbo=2.0.2&group=demo-provider&interface=org.apache.dubbo.registry.RegistryService&pid=15740&qos.enable=false&release=3.0.6&server=localhost, cause: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: ErrCode:403, ErrMsg:<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Tue Apr 05 19:09:28 CST 2022</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>
	at org.apache.dubbo.registry.nacos.NacosRegistry.doUnregister(NacosRegistry.java:194) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.support.FailbackRegistry.unregister(FailbackRegistry.java:253) ~[dubbo-3.0.6.jar:3.0.6]
	... 47 common frames omitted
Caused by: com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: ErrCode:403, ErrMsg:<html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Tue Apr 05 19:09:28 CST 2022</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:556) ~[nacos-client-1.4.2.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:498) ~[nacos-client-1.4.2.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:493) ~[nacos-client-1.4.2.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.deregisterService(NamingProxy.java:271) ~[nacos-client-1.4.2.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.deregisterInstance(NacosNamingService.java:252) ~[nacos-client-1.4.2.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.deregisterInstance(NacosNamingService.java:238) ~[nacos-client-1.4.2.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.deregisterInstance(NacosNamingService.java:222) ~[nacos-client-1.4.2.jar:na]
	at org.apache.dubbo.registry.nacos.NacosNamingServiceWrapper.deregisterInstance(NacosNamingServiceWrapper.java:63) ~[dubbo-3.0.6.jar:3.0.6]
	at org.apache.dubbo.registry.nacos.NacosRegistry.doUnregister(NacosRegistry.java:189) ~[dubbo-3.0.6.jar:3.0.6]
	... 48 common frames omitted

翻看了nacos源码发现

    public void setAddress(String address) {
        this.address = address;
        if (address != null) {
            try {
                URL url = URL.valueOf(address);

                // Refactor since 2.7.8
                updatePropertyIfAbsent(this::getUsername, this::setUsername, url.getUsername());
                updatePropertyIfAbsent(this::getPassword, this::setPassword, url.getPassword());
                updatePropertyIfAbsent(this::getProtocol, this::setProtocol, url.getProtocol());
                updatePropertyIfAbsent(this::getPort, this::setPort, url.getPort());

                Map<String, String> params = url.getParameters();
                if (CollectionUtils.isNotEmptyMap(params)) {
                    params.remove(BACKUP_KEY);
                }
                updateParameters(params);
            } catch (Exception ignored) {
            }
        }
    }

在处理address时,会处理usernamepassword,因此需要这样配置

dubbo:
  registry:
    address: nacos://localhost:8848?username=nacos&password=nacos

如何把dubbo服务注册到nacos指定的命名空间?

翻看DubboConfigurationProperties这个类的源码,以及对象成员属性的所有字段,均没有找到任何关于namespace的配置项,但在registry对象里面有一个parameters配置,看起来有点像,试着在这个配置里面追加一个namespace,果然成了,正确配置如下

dubbo:
  registry:
    address: nacos://localhost:8848?username=nacos&password=nacos
    parameters:
      namespace: demo-dubbo-nacos

dubbo消费端

消费端关键的一个注解就是**@DubboReference**,在使用这个注解的时候需要指定版本号和group,例如

@DubboReference(version = "demo-1.0.0", group = "demo-provider")

完整代码如下

@RestController
public class DemoHelloConsumerController {

    @DubboReference(version = "demo-1.0.0", group = "demo-provider")
    private DemoService demoService;

    @GetMapping(path = "/hello-dubbo")
    public String helloDubbo(String name) {
        return demoService.helloWorld(name);
    }
}

dubbo发布rest服务

只需要修改服务提供者**@DubboService注解的protocol**属性
@DubboService(protocol = "dubbo,rest")

启动报错

2022-04-09 09:07:39.058 ERROR 10896 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: No such extension org.apache.dubbo.rpc.Protocol by name rest, possible causes: 
(1) rest=org.apache.dubbo.rpc.protocol.rest.RestProtocol:
java.lang.IllegalStateException: Failed to load extension class (interface: interface org.apache.dubbo.rpc.Protocol, class line: rest=org.apache.dubbo.rpc.protocol.rest.RestProtocol) in jar:file:/G:/repository/org/apache/dubbo/dubbo/3.0.7/dubbo-3.0.7.jar!/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol, cause: org/jboss/resteasy/client/jaxrs/ClientHttpEngine
java.lang.IllegalStateException: Failed to load extension class (interface: interface org.apache.dubbo.rpc.Protocol, class line: rest=org.apache.dubbo.rpc.protocol.rest.RestProtocol) in jar:file:/G:/repository/org/apache/dubbo/dubbo/3.0.7/dubbo-3.0.7.jar!/META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol, cause: org/jboss/resteasy/client/jaxrs/ClientHttpEngine
	at org.apache.dubbo.common.extension.ExtensionLoader.loadResource(ExtensionLoader.java:1052)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadFromClass(ExtensionLoader.java:1019)
	at org.apache.dubbo.common.extension.ExtensionLoader.lambda$loadDirectory$4(ExtensionLoader.java:1007)
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
	at java.base/java.util.Collections$UnmodifiableMap.forEach(Collections.java:1553)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadDirectory(ExtensionLoader.java:1006)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadDirectory(ExtensionLoader.java:943)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadExtensionClasses(ExtensionLoader.java:931)
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtensionClasses(ExtensionLoader.java:913)
	at org.apache.dubbo.common.extension.ExtensionLoader.getAdaptiveExtensionClass(ExtensionLoader.java:1243)
	at org.apache.dubbo.common.extension.ExtensionLoader.createAdaptiveExtension(ExtensionLoader.java:1231)
	at org.apache.dubbo.common.extension.ExtensionLoader.getAdaptiveExtension(ExtensionLoader.java:713)
	at org.apache.dubbo.config.ServiceConfig.postProcessAfterScopeModelChanged(ServiceConfig.java:154)
	at org.apache.dubbo.config.AbstractConfig.setScopeModel(AbstractConfig.java:395)
	at org.apache.dubbo.config.AbstractConfig.<init>(AbstractConfig.java:117)
	at org.apache.dubbo.config.AbstractMethodConfig.<init>(AbstractMethodConfig.java:103)
	at org.apache.dubbo.config.AbstractInterfaceConfig.<init>(AbstractInterfaceConfig.java:192)
	at org.apache.dubbo.config.AbstractServiceConfig.<init>(AbstractServiceConfig.java:132)
	at org.apache.dubbo.config.ServiceConfigBase.<init>(ServiceConfigBase.java:84)
	at org.apache.dubbo.config.ServiceConfig.<init>(ServiceConfig.java:136)
	at org.apache.dubbo.config.spring.ServiceBean.<init>(ServiceBean.java:56)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
	at com.wen3.dubbonacos.DemoProviderApplication.main(DemoProviderApplication.java:15)
Caused by: java.lang.NoClassDefFoundError: org/jboss/resteasy/client/jaxrs/ClientHttpEngine
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:467)
	at org.apache.dubbo.common.extension.ExtensionLoader.loadResource(ExtensionLoader.java:1048)
	... 45 more
Caused by: java.lang.ClassNotFoundException: org.jboss.resteasy.client.jaxrs.ClientHttpEngine
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 48 more

	at org.apache.dubbo.common.extension.ExtensionLoader.findException(ExtensionLoader.java:747) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:754) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:548) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:523) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.findConfiguredPort(ServiceConfig.java:769) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.buildUrl(ServiceConfig.java:552) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:408) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:396) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:361) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:233) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServiceInternal(DefaultModuleDeployer.java:341) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServices(DefaultModuleDeployer.java:313) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.start(DefaultModuleDeployer.java:145) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onContextRefreshedEvent(DubboDeployApplicationListener.java:111) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:100) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:45) ~[dubbo-3.0.7.jar:3.0.7]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.6.jar:2.6.6]
	at com.wen3.dubbonacos.DemoProviderApplication.main(DemoProviderApplication.java:15) ~[classes/:na]

解决办法

添加依赖

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-rest</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

重启启动就不会提示找不到org.jboss.resteasy.client.jaxrs.ClientHttpEngine这个类了

再次报错

2022-04-09 09:29:09.393 ERROR 13308 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.RuntimeException: RESTEASY003130: Class is not a root resource.  It, or one of its interfaces must be annotated with @Path: com.wen3.dubbonacos.service.DemoService implements: 
	at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:185) ~[resteasy-jaxrs-3.14.0.Final.jar:3.14.0.Final]
	at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:164) ~[resteasy-jaxrs-3.14.0.Final.jar:3.14.0.Final]
	at org.apache.dubbo.rpc.protocol.rest.BaseRestProtocolServer.deploy(BaseRestProtocolServer.java:53) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.protocol.rest.RestProtocol.doExport(RestProtocol.java:127) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.protocol.AbstractProxyProtocol.export(AbstractProxyProtocol.java:89) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:66) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:76) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:61) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper.export(ProtocolSerializationWrapper.java:47) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.registry.integration.RegistryProtocol.lambda$doLocalExport$2(RegistryProtocol.java:294) ~[dubbo-3.0.7.jar:3.0.7]
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na]
	at org.apache.dubbo.registry.integration.RegistryProtocol.doLocalExport(RegistryProtocol.java:292) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:239) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:64) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:74) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.cluster.filter.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:58) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.protocol.ProtocolSerializationWrapper.export(ProtocolSerializationWrapper.java:47) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.doExportUrl(ServiceConfig.java:641) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.exportRemote(ServiceConfig.java:619) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.exportUrl(ServiceConfig.java:578) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:410) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:396) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:361) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:233) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServiceInternal(DefaultModuleDeployer.java:341) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.exportServices(DefaultModuleDeployer.java:313) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.deploy.DefaultModuleDeployer.start(DefaultModuleDeployer.java:145) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onContextRefreshedEvent(DubboDeployApplicationListener.java:111) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:100) ~[dubbo-3.0.7.jar:3.0.7]
	at org.apache.dubbo.config.spring.context.DubboDeployApplicationListener.onApplicationEvent(DubboDeployApplicationListener.java:45) ~[dubbo-3.0.7.jar:3.0.7]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.18.jar:5.3.18]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.6.jar:2.6.6]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.6.jar:2.6.6]
	at com.wen3.dubbonacos.DemoProviderApplication.main(DemoProviderApplication.java:15) ~[classes/:na]

解决办法

服务实现的接口需要添加javax.ws.rs的注解,在定义接口的工程里面添加如下依赖

        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>${javax.ws.rs-api.version}</version>
        </dependency>

接口上添加相关注解

public interface DemoService {

    @GET
    @Produces
    @Consumes
    @Path("/hello")
    String helloWorld(@QueryParam("name") String name);
}

完善消费者

现在服务提供者向nacos注册了三个服务,为什么是3个?

  • nacos做为注册中心,服务提供者向注册中心了注册了一个服务,可以暴露提供者所有的rest接口
  • 引用的dubbo框架向nacos暴露了一个服务,这个服务同时支持dubbo协议和rest协议,两个协议的端口不同

所以相当于提供了三个接口,那么消费者可以使用Feign组件访问,也可以实现dubbo协议访问,我们把这三种访问方式都演示一下,改造后的消费者代码如下

看下nacos的服务列表
在这里插入图片描述

@RestController
public class DemoHelloConsumerController {

    @Resource
    private DemoProviderFeign demoProviderFeign;
    @DubboReference(version = "demo-1.0.0", group = "demo-provider", protocol = "dubbo")
    private DemoService demoService;
    @DubboReference(version = "demo-1.0.0", group = "demo-provider", protocol = "rest")
    private DemoService demoServiceRest;

    @GetMapping(path = "/hello")
    public String hello(String name) {
        return demoProviderFeign.hello(name);
    }

    @GetMapping(path = "/hello-dubbo")
    public String helloDubbo(String name) {
        return demoService.helloWorld(name);
    }
    
    @GetMapping(path = "/hello-rest")
    public String helloRest(String name) {
        return demoServiceRest.helloWorld(name);
    }
}

启动消费者进行测试

$ curl "http://localhost:8081/hello?name=xxx1"
xxx1,hello!

$ curl "http://localhost:8081/hello-dubbo?name=xxx2"
hello xxx2!

$ curl "http://localhost:8081/hello-rest?name=xxx3"
hello xxx3!

总结

本文介绍了一个SpringBoot应用,如何向注册中心nacos注册dubbo服务和rest服务,并且在配置和使用过程中遇到的一些常见的问题,也做了分析和解决。

dubbo框架既可以发布dubbo服务,也能发布rest服务,但是对rest服务有要求,那就是必须使用javax.ws.rs下面的注解。

dubbo框架发布的服务更倾向于微服务内部调用,可以提高内部交互的整体性能。Spring Cloud注册中心Eureka可以无缝替换成nacos,并且使用Feign调用的场景可以不做任何修改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot发布dubbo服务注册到nacos 的相关文章

  • Linux环境rpm yum与dnf详解

    目录 一 rpm工具 1 1 简介 1 2 参数介绍 1 3 常用情景命令 二 yum工具 2 1简介 2 2 常用命令 三 dnf工具 3 1简介 3 2常用命令 本篇文章主要从使用的角度来介绍Linux下rpm yum与dnf三种工具
  • 搭建docker+sonarqube并使用scanner、maven分析项目

    一 搭建docker sonarqube 步骤1 进入服务器 创建一个文件夹sonarqube ssh root ip mkdir sonarqube cd sonarqube 可以选用临时或者正式部署方案 临时部署方案 通用部署 dock
  • 厂房效果图制作

    关于厂房 工厂园区规划 及钢结构类项目效果图制作过程中所经常遇到的一些问题 在这里予以汇总整理 并对场景搭建的流程给予简述 三维场景创建 首先需要把CAD平面规划图纸 或是PDF电子版文档 或是手绘稿等弄清楚 场地占地多少亩 有多少厂房 办

随机推荐

  • 1.1 初识基准测试(Benchmark)

    基准测试 Benchmark 是Go语言中用于衡量代码性能的重要工具 通过编写基准测试函数 并使用testing B提供的方法来记录执行时间和其他指标 我们可以准确地评估代码的性能表现 在开发过程中 合理使用基准测试可以帮助我们优化代码 提
  • 面试系列之基础篇

    强引用 软引用 弱引用 虚引用 一般面试官会这样问 你知道Java中对象的引用类型有哪几种吗 分别讲讲这几种之间的区别 强引用 只要强引用还存在 垃圾收集器永远不会回收被引用的对象 软引用 描述一些还有用但是并非必需的对象 将要发生内存溢出
  • 深度学习与人脸识别系列(3)__基于VGGNet的人脸识别系统

    作者 wjmishuai 出处 http blog csdn net wjmishuai article details 50854155 声明 版权所有 转载请联系作者并注明出处 1 引言 本文中介绍的人脸识别系统是基于这两篇论文 Ver
  • java高qps接口设计_高并发后端设计-限流篇

    系统在设计之初就会有一个预估容量 长时间超过系统能承受的TPS QPS阈值 系统可能会被压垮 最终导致整个服务不够用 为了避免这种情况 我们就需要对接口请求进行限流 限流的目的是通过对并发访问请求进行限速或者一个时间窗口内的的请求数量进行限
  • leetcode刷题:最大子序积

    1 题目 题解 实现上面的过程 class Solution public int maxProduct vector
  • 删除gitlab上的分支

    好久没有更新了 今天记录一下删除gitlab上的分支的操作 登录仓库后 依次点击 project gt home gt Readme gt repository gt branches 会看到所有master和所有分支 点击右侧删除即可 看
  • 剑指Offer(一):二维数组中查找最大值

    题目 这个题目说的是 给你一个二维数组 matrix 和一个目标值 target 你要在数组里找到这个目标值 然后返回它的行 列下标 如果找不到 则返回 1 1 这个数组的每一行都是从左向右递增 每一列都是从上到下递增 和 二维数组的二分搜
  • 首届《产业数字化金铲奖》榜单来袭

    出品 产业家 2021年 产业数字化是绝对的主题 在这个变幻莫测的一年里 越来越多的企业开始寻求数字化转型方向 它们在工业 农业 医疗 教育等等方向都在努力作出自己的数字化尝试 个体寻找数字进化之路 企业构建新的技术底层 产业定义互联网下半
  • 相机的坐标系转换(1)

    前言 常言道 工欲善其事 必先利其器 如欲明其理 必先定其义 后一句是我编的 不过 这句话还是有道理的 如果要想明白相机的坐标系之间的转换 那么必须明白相机有哪几个坐标系 并对它们下一个明确的定义 只有这样 我们接下来的工作才好开展 正文
  • Rose(双机热备)服务配置

    安装步骤省略 下面只讲配置 1 一般会设置两个job iis 及 sql 此次选择的是SqlServer 版本没有要求 大概流程是 两台服务器 都有不同的ip 内网或者外网 然后虚拟一个ip出来 比如 服务器A 192 168 100 1
  • Leetcode每日一题:面试题02.02.kth-node-from-end-of-list-lcci(返回倒数第k个节点)

    思路 典型得快慢指针问题 快指针与慢指针中间隔着k 2个节点 那么同时 快慢指针 当快指针指向链表结尾节点时 慢指针指向倒数第k个节点 struct ListNode int val ListNode next ListNode int x
  • Java:基于注解对类实例字段进行通用校验

    前言 后台服务处理前端的请求时 会有这样的一种需求 即校验请求中的参数是否符合校验规则 校验参数是否符合的一种方法是 罗列请求参数 基于校验规则一个一个的校验参数 如果存在不符合的 就返回字段值不符合规则的提示 通过就向下执行 这种方法是可
  • CSS线性渐变linear-gradient

    线性渐变是多种颜色沿着一条直线即渐变线过渡 发生渐变依靠渐变线和色标 其中渐变线来控制发生渐变的方向 色标包括颜色值和位置来控制渐变的色彩变化 创建一个线性渐变 需要指定两种颜色 还可以实现不同方向 指定为一个角度 的渐变效果 如果不指定方
  • 文件上传-.user.ini的妙用

    小伙伴们大家好 本期为大家带来的是 user ini在文件上传漏洞中的妙用 目录 user ini user ini的妙用原理 利用 user ini的环境 实战演示 1 先尝试直接上传webshell 2 看是否能够上传除php和png外
  • img标签和p标签是行内元素还是块级元素?以及p标签中可以放img标签吗?

    img标签 行内块元素 类似于 inline block 可以被p标签包裹 比如p是居中 图片也中了 p标签 块级元素 默认宽度占满一行 HTML p 是段落标签 除了可以添加文字内容外 完全可以添加其他html标签也包括IMG图片标签 其
  • 十大热门编程语言的介绍

    小编给大家分享一篇关于现阶段十大热门编程语言的文章 经过流行的搜索引擎 如谷歌 必应 雅虎 维基百科 亚马逊 YouTube和百度 用于计算评级 得出十大热门编程语言排行榜的榜单 根据百度百科以及网上查阅总结分析以上十大热门编程语言的介绍
  • 安全体系建立标准

    随着我国企业信息化的普及 信息化给我国企业带来积极影响的同时 也带来了信息安全方面的消极影响 一方面信息化在企业发展的过程中 对节约企业成本和达到有效管理起到了积极的推动作用 另一方面伴随着全球信息化和网络化进程的发展 与此相关的信息安全问
  • mysql中索引的null值问题

    在mysql中 对含有null值的索引列 以及is null is not null的查询条件是否会走索引这点 网上有很多说法 为此我自己单独做了个实验 首先创建两张表 一张表所有字段默认为null 另一张表所有字段默认为not null
  • QWidget(长文)

    一 描述 1 QWidget 是用户界面的原子 它从窗口系统接收鼠标 键盘和其他事件 并在屏幕上绘制自己的表示 每个小部件都是矩形的 它们按Z顺序排序 小部件由其父部件和它前面的小部件剪裁 2 未嵌入父窗口小部件的 QWidget 称为窗口
  • springboot发布dubbo服务注册到nacos

    目录 dubbo注册服务到nacos的pom依赖 使用dubbo发布rest服务报错 解决403 unknown user错误 如何把dubbo服务注册到nacos指定的命名空间 dubbo消费端 dubbo发布rest服务 启动报错 解决