Dubbo 大坑 :Caused by: java.lang.IllegalStateException: Failed to check the status of the service
这个错误 我真的是服了… 原本以为是之前启动过dubbo服务,在zookeeper节点中存在重复节点导致错误,我将节点清空之后还是报错,最后发现是由于我在提供者中服务中设置了版本信息,但是消费者服务中忘了设置,所以一直错误。。。添加版本信息后 则可以正常调用。
java.lang.IllegalStateException: Failed to check the status of the service .
java.lang.IllegalStateException: Failed to check the status of the service com.example.dubboapi.service.UserService. No provider available for the service com.example.dubboapi.service.UserService from the url dubbo://192.168.65.1/com.example.dubboapi.service.UserService?application=dubbo_consumer&dubbo=2.0.2&interface=com.example.dubboapi.service.UserService&metadata-type=remote&methods=doKill,queryUser&pid=8640®ister.ip=192.168.65.1&release=3.0.2.1&side=consumer&sticky=false×tamp=1658417440842 to the consumer 192.168.65.1 use dubbo version 3.0.2.1at org.apache.dubbo.config.ReferenceConfig.checkInvokerAvailable(ReferenceConfig.java:444)at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:337)at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:204)at com.demo.test.AnnotationTest.refService(AnnotationTest.java:50)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:221)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
解决方法
API调用方式
提供者服务:
public class ProviderApi {public static void main(String[] args) throws IOException {UserServiceImpl userService = new UserServiceImpl();//1.应用信息ApplicationConfig applicationConfig = new ApplicationConfig();applicationConfig.setName("dubbo_provider");//2.注册信息RegistryConfig registryConfig = new RegistryConfig();registryConfig.setAddress("zookeeper://127.0.0.1:2181");//3.协议信息ProtocolConfig protocolConfig =new ProtocolConfig();protocolConfig.setName("dubbo");protocolConfig.setPort(20880);protocolConfig.setThreads(200);//服务隔离//服务发布ServiceConfig<UserService> serviceConfig =new ServiceConfig<>();serviceConfig.setApplication(applicationConfig);serviceConfig.setRegistry(registryConfig);serviceConfig.setProtocol(protocolConfig);//发布那个接口serviceConfig.setInterface(UserService.class);serviceConfig.setRef(userService);//注意版本号serviceConfig.setVersion("1.0.0");//服务发布serviceConfig.export();System.in.read();}
}
消费者服务:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ConsumerConfiguration.class)
public class AnnotationTest {@Testpublic void refService(){//1.应用信息ApplicationConfig applicationConfig = new ApplicationConfig();applicationConfig.setName("dubbo_consumer");//2.注册信息RegistryConfig registryConfig = new RegistryConfig();registryConfig.setAddress("zookeeper://127.0.0.1:2181");//引用APIReferenceConfig<UserService> referenceConfig = new ReferenceConfig<>();referenceConfig.setApplication(applicationConfig);referenceConfig.setRegistry(registryConfig);referenceConfig.setInterface(UserService.class);referenceConfig.setVersion("1.0.0");//服务引用 引用过程非常的重,如果想要API方式去引用服务,这个对象需要缓存UserService userService = referenceConfig.get();System.out.println(userService.queryUser("帅哥"));}
}
注解调用方式
版本号是加载注解后面的,需要注意。
提供者端:
@DubboService(version = "1.0")
public class UserServiceImpl implements UserService {@Overridepublic String queryUser(String s) {System.out.println(s);System.out.println("==========provider===========" + s);return "OK--" + s;}@Overridepublic void doKill(String s) {System.out.println("==========provider===========" + s);}}
消费端:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ConsumerConfiguration.class)
public class AnnotationTest {@DubboReference(check = false,version = "1.0")private UserService userService;@Testpublic void test(){System.out.println(userService.queryUser("帅哥"));}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
