dubbo客户端初始化问题

ゝ一纸荒年。 2021-11-01 04:20 422阅读 0赞

背景:工作中遇到了调用dubbo服务的场景,项目不是spring项目,我只想简单的调用服务端的接口,不想加入那么多配置。

在服务对接中,遇到调用dubbo服务的场景。按照公司的框架给的开发文档,要加配置!要写注解!不符合我的期望。我只是想用一下Dubbo!

于是把目光转向了dubbo官网的示例。

1、添加依赖

首先是添加pom依赖,我是一步步添加这么多的

  1. 1 <spring.version>4.2.5.RELEASE</spring.version>
  2. 2
  3. 3 <dependency>
  4. 4 <groupId>com.alibaba</groupId>
  5. 5 <artifactId>dubbo</artifactId>
  6. 6 <version>2.6.2</version>
  7. 7 <exclusions>
  8. 8 <exclusion>
  9. 9 <groupId>com.101tec</groupId>
  10. 10 <artifactId>zkclient</artifactId>
  11. 11 </exclusion>
  12. 12 </exclusions>
  13. 13 </dependency>
  14. 14 <dependency>
  15. 15 <groupId>org.springframework</groupId>
  16. 16 <artifactId>spring-context</artifactId>
  17. 17 <version>${spring.version}</version>
  18. 18 </dependency>
  19. 19 <dependency>
  20. 20 <groupId>org.springframework</groupId>
  21. 21 <artifactId>spring-beans</artifactId>
  22. 22 <version>${spring.version}</version>
  23. 23 </dependency>
  24. 24 <dependency>
  25. 25 <groupId>org.springframework</groupId>
  26. 26 <artifactId>spring-core</artifactId>
  27. 27 <version>${spring.version}</version>
  28. 28 </dependency>
  29. 29 <dependency>
  30. 30 <groupId>org.springframework</groupId>
  31. 31 <artifactId>spring-tx</artifactId>
  32. 32 <version>${spring.version}</version>
  33. 33 </dependency>

2、写代码

a、有错误的代码示例(Dubbo的示例,这也是坑的开始。)

  1. 1 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
  2. 2 context.start();
  3. 3 DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy
  4. 4 while (true) {
  5. 5 try {
  6. 6 Thread.sleep(1000);
  7. 7 String hello = demoService.sayHello("world"); // call remote method
  8. 8 System.out.println(hello); // get result
  9. 9 } catch (Throwable throwable) {
  10. 10 throwable.printStackTrace();
  11. 11 }
  12. 12 }

我这样用了,项目启动的时候一直报错,如下:

  1. 2018-10-15 16:30:30 [org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-[INFO] Loading XML bean definitions from class path resource [E:/opt/dwf/dwf-dispatch-center/conf/dubbo_consumer.xml]
  2. java.lang.reflect.InvocationTargetException
  3. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  6. at java.lang.reflect.Method.invoke(Method.java:498)
  7. at com.daojia.dwf.mvc.initial.app.AppInitial.initial(AppInitial.java:30)
  8. at com.daojia.dwf.mvc.DWFBootstrap.init(DWFBootstrap.java:71)
  9. at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
  10. at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
  11. at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
  12. at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4950)
  13. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5652)
  14. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
  15. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1694)
  16. at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1684)
  17. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  18. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  19. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  20. at java.lang.Thread.run(Thread.java:748)
  21. Caused by: java.lang.ExceptionInInitializerError
  22. at com.daojia.dispatchcenter.inits.ServerInit.initial(ServerInit.java:38)
  23. ... 18 more
  24. Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [E:/opt/dwf/dwf-dispatch-center/conf/dubbo_consumer.xml]; nested exception is java.io.FileNotFoundException: class path resource [E:/opt/dwf/dwf-dispatch-center/conf/dubbo_consumer.xml] cannot be opened because it does not exist
  25. at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
  26. at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
  27. at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
  28. at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
  29. at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
  30. at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
  31. at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
  32. at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
  33. at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
  34. at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:614)
  35. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:515)
  36. at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
  37. at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
  38. at com.daojia.dispatchcenter.inits.DubboInit.<clinit>(DubboInit.java:33)
  39. ... 19 more
  40. Caused by: java.io.FileNotFoundException: class path resource [E:/opt/dwf/dwf-dispatch-center/conf/dubbo_consumer.xml] cannot be opened because it does not exist
  41. at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
  42. at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
  43. ... 32 more

一直报找不到配置,这就奇怪了。尝试了许多次,依然这样。

我在代码里尝试把配置文件打印出来,内容是可以打印出来的。这说明路径是没有错的。

搜索了一番,

https://blog.csdn.net/tiananma0607/article/details/76595187

看了这篇文章之后,才了解到,

ClassPathXmlApplicationContext 对于文件的路径是有要求的。类似于类需要先被加载一样。我这配置文件很明显是没有被提前加载的。

因为使用框架的原因,我又不想把配置放到那个目录下,于是查看该继承的父类,找到了“FileSystemXmlApplicationContext”这个方法,改了之后,不再提示那个错误了。

b、正常的代码

  1. 1 String configFolder = Config.getConfigFolder();
  2. 2 if(configFolder.startsWith("/")) {
  3. 3 configFolder = "/" + configFolder;
  4. 4 }
  5. 5 String dubboConfig = configFolder + ServerInit.getConfigPath(SystemConstant.DUBBO_CONFIG_NAME);
  6. 6 log.warn("DubboInit,dubboConfig:" + dubboConfig);
  7. 7 FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(new String[] {dubboConfig});
  8. 8 context.start();

转载于:https://www.cnblogs.com/shuimutong/p/11047255.html

发表评论

表情:
评论列表 (有 0 条评论,422人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL初始化以及客户工具的使用

                          MySQL初始化以及客户端工具的使用                                             作者