欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot發(fā)布dubbo服務(wù)注冊到nacos實現(xiàn)方式

 更新時間:2023年09月07日 09:39:17   作者:太空眼睛  
這篇文章主要介紹了springboot發(fā)布dubbo服務(wù)注冊到nacos實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

dubbo注冊服務(wù)到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-api,spring-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發(fā)布rest服務(wù)報錯

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服務(wù)注冊到nacos,如果nacos開啟了權(quán)限認證,那么springboot應(yīng)用的配置文件在寫dubbo配置項時,需要指定用戶名和密碼,如果這樣指定是無效的

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

這樣在啟動時,dubbonacos注冊服務(wù)會報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源碼發(fā)現(xiàn)

    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服務(wù)注冊到nacos指定的命名空間?

翻看DubboConfigurationProperties這個類的源碼,以及對象成員屬性的所有字段,均沒有找到任何關(guān)于namespace的配置項,但在registry對象里面有一個parameters配置,看起來有點像,試著在這個配置里面追加一個namespace,果然成了,正確配置如下

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

dubbo消費端

消費端關(guān)鍵的一個注解就是**@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發(fā)布rest服務(wù)

只需要修改服務(wù)提供者**@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]

解決辦法

服務(wù)實現(xiàn)的接口需要添加javax.ws.rs的注解,在定義接口的工程里面添加如下依賴

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

接口上添加相關(guān)注解

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

完善消費者

現(xiàn)在服務(wù)提供者向nacos注冊了三個服務(wù),為什么是3個?

  • nacos做為注冊中心,服務(wù)提供者向注冊中心了注冊了一個服務(wù),可以暴露提供者所有的rest接口
  • 引用的dubbo框架向nacos暴露了一個服務(wù),這個服務(wù)同時支持dubbo協(xié)議和rest 協(xié)議,兩個協(xié)議的端口不同

所以相當(dāng)于提供了三個接口,那么消費者可以使用Feign組件訪問,也可以實現(xiàn)dubbo協(xié)議訪問,我們把這三種訪問方式都演示一下,改造后的消費者代碼如下

看下nacos的服務(wù)列表

在這里插入圖片描述

@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!

總結(jié)

本文介紹了一個SpringBoot應(yīng)用,如何向注冊中心nacos注冊dubbo服務(wù)和rest服務(wù),并且在配置和使用過程中遇到的一些常見的問題,也做了分析和解決。

dubbo框架既可以發(fā)布dubbo服務(wù),也能發(fā)布rest服務(wù),但是對rest服務(wù)有要求,那就是必須使用javax.ws.rs下面的注解。

dubbo框架發(fā)布的服務(wù)更傾向于微服務(wù)內(nèi)部調(diào)用,可以提高內(nèi)部交互的整體性能。Spring Cloud注冊中心Eureka可以無縫替換成nacos,并且使用Feign調(diào)用的場景可以不做任何修改。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中數(shù)組越界異常的優(yōu)雅解決方式

    Java中數(shù)組越界異常的優(yōu)雅解決方式

    ?數(shù)組越界報錯通常發(fā)生在嘗試訪問數(shù)組中不存在的索引時,這可能導(dǎo)致程序崩潰或異常,這篇文章主要給大家介紹了關(guān)于Java中數(shù)組越界異常的優(yōu)雅解決方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • Java實現(xiàn)微信網(wǎng)頁授權(quán)的示例代碼

    Java實現(xiàn)微信網(wǎng)頁授權(quán)的示例代碼

    這篇文章主要介紹了Java實現(xiàn)微信網(wǎng)頁授權(quán)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • JAVA項目如何打包部署到Linux服務(wù)器上

    JAVA項目如何打包部署到Linux服務(wù)器上

    本文詳細介紹了在服務(wù)器上部署環(huán)境包括JDK、MySQL、Tomcat的設(shè)置,以及使用Idea-Maven-SpringBoot進行jar包打包部署的流程,內(nèi)容涵蓋了MySQL配置注意事項、pom.xml配置、打包命令等關(guān)鍵步驟,同時,也提供了如何將jar包上傳到Linux服務(wù)器并運行的具體方法
    2024-10-10
  • mybatis 如何通過resultMap 返回long

    mybatis 如何通過resultMap 返回long

    這篇文章主要介紹了mybatis 如何通過resultMap 返回long的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Mvc中傳遞參數(shù)方法之url/requestMapping詳解

    Spring Mvc中傳遞參數(shù)方法之url/requestMapping詳解

    在開發(fā)中,參數(shù)傳遞是必不可少的一個功能,下面這篇文章主要給大家介紹了關(guān)于Spring Mvc中傳遞參數(shù)方法之url/requestMapping的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Spring Security代碼實現(xiàn)JWT接口權(quán)限授予與校驗功能

    Spring Security代碼實現(xiàn)JWT接口權(quán)限授予與校驗功能

    本文給大家介紹Spring Security代碼實現(xiàn)JWT接口權(quán)限授予與校驗功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-12-12
  • SpringBoot中支持Https協(xié)議的實現(xiàn)

    SpringBoot中支持Https協(xié)議的實現(xiàn)

    本文主要介紹了SpringBoot中支持Https協(xié)議的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • springboot中自定義異常以及定制異常界面實現(xiàn)過程解析

    springboot中自定義異常以及定制異常界面實現(xiàn)過程解析

    這篇文章主要介紹了springboot中自定義異常以及定制異常界面實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 淺析idea 添加項目依賴的兩種方式

    淺析idea 添加項目依賴的兩種方式

    這篇文章主要介紹了idea 添加項目依賴的兩種方式,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java?8中讀取文件內(nèi)容?Files.lines()方法使用示例

    Java?8中讀取文件內(nèi)容?Files.lines()方法使用示例

    這篇文章主要介紹了Java?8中讀取文件內(nèi)容Files.lines()方法如何使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論