访问dubbo的rest服务返回404

来源:互联网 发布:ajax上传文件到阿里云 编辑:程序博客网 时间:2024/06/05 03:00

情景:开发环境使用postman访问dubbo的rest服务时,总是返回404,而正式环境是正常的。


原因:tomcat端口是80,dubbo的rest服务端口是8080,tomcat端口号与dubbo rest服务端口号不一致,所以返回404


这个问题,需要分情况,dubbo rest的服务器分为嵌入式和使用外部服务器两种,如果使用外部服务器,那么rest端口号要与dubbo:protocol name="rest" port="8090"中的port一致。如果是嵌入式,那么就不能一样。


嵌入式写法:

<dubbo:protocol name="rest" server="jetty"/>
如果不指定server,默认是jetty,而且是嵌入式的,除了jetty,还有tomcat、netty、sunhttp可选。


集成式写法:


server必须指定为servlet

<dubbo:protocol name="rest" server="servlet"/>
并且web.xml中,必须配置BootStrapListener和DispatcherServlet

<web-app>    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/classes/META-INF/spring/dubbo-demo-provider.xml</param-value>    </context-param>    <listener>        <listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class>    </listener>    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <servlet>        <servlet-name>dispatcher</servlet-name>        <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>dispatcher</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping></web-app>

并且,BootstrapListener必须配置在ContextLoaderListener前边


结论

使用嵌入式server,则rest接口与tomcat端口不一致。

使用外部server,则rest接口需与之保持一致。

0 0
原创粉丝点击