美文网首页
springboot中发布dubbo rest服务

springboot中发布dubbo rest服务

作者: 站在海边看远方 | 来源:发表于2018-11-14 16:37 被阅读0次

1.需求分析

本次的需求是在springboot里发布dubbo rest 服务,用到了dubbox  ,dubbox需要在web.xml里配置2个监听器,一个是spring的监听器,一个是dubbox的监听器。先介绍一下dubbox,dubbox是当当的一个开源框架,实现了dubbo,rest服务,详细配置可以看一下dubbox的官方文档,也可以百度一下用法。

官方文档:https://github.com/dangdangdotcom/dubbox

我们先不采用springboot的方式启动,建一个web工程,然后不用web.xml配置,demo结构如下

项目结构图

2.功能实现

1.在MyContextLoaderListener实现ServletContextListener,这是自定义监听器,用来实现spring的初始化,功能和ContextLoadListenter一样

2.在TestConfiguration配置rest服务的一些相关信息,dubbo的配置信息等

3.在TestWebAppInitializer实现WebApplicationInitializer,实现web容器的初始化,在这里定义监听器的执行顺序,由于必须要实现BootstrapListenter在ContextLoadListenter之前执行,所以在第一步用了一个自定义的监听器,将context的初始化放到自定义的监听器中,如果不自定义监听器,就会产生先执行ContextLoadLisenter,后执行BootstrapListener,然后就会报错,未配置BootstrapListener,

监听器执行顺序

3.server采用的是servlet,所以在这里再配置一个servlet,

servlet配置

4.经过这样的处理之后,就可以保证BootstrapListenter先于ContextLoadLisenter执行,然后就不会报错,测试可以通过rest方式访问。目前这是一个web工程,用的tomcat启动,下面放到springboot中启动。

3.springboot中发布dubbo  rest服务

1.此问题的核心是解决BootstrapListenter和ContextLoadLisenter加载顺序问题,在springboot中,context需要在springboot的启动类中加载,所以没法自定义监听器,然后在定义2个监听器执行顺序,所以进入BootstrapListenter的内部,将初始化方法单独提出来放在context初始化之前,然后再添加一遍BootstrapListenter,保证销毁方法的执行。此方法可能有点简陋,暂时没想到别的更好的方法。

springboot中的监听器加载

4.总结

dubbox官方文档中在web.xml中配置的监听器加载,但是实际需求中并没有web.xml。所以需要自己来在代码中加载监听器。产生问题的主要原因是2个监听器的加载顺序问题。一开始直接添加2个监听器

servletCxt.addListener(BootstrapListener.class);

//servletCxt.addListener(MyContextLoaderListener.class);

servletCxt.addListener(ContextLoaderListener.class);

这样会先跳过BootstrapListener,先执行ContextLoaderListener,所以自定义了一个监听器,然后就能按顺序执行。

相关文章

网友评论

      本文标题:springboot中发布dubbo rest服务

      本文链接:https://www.haomeiwen.com/subject/ptvngftx.html