使用dubbox发布rest服务,使用外部容器部署应用的时候,web.xml中有如下配置请求服务路径
<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>/services/*</url-pattern>
</servlet-mapping>
在service-provider.xml配置如下
<!-- use the external tomcat or other server with the servlet approach; the port and contextpath must be exactly the same as those in external server -->
<dubbo:protocol name="rest" port="8888" contextpath="services" server="servlet"/>
这样的配置是在应用发布在webapps的ROOT根路径下的配置,访问地址如下:
http://localhost:8888/services/...
当应用发布在非ROOT中是,比如webapps/provider/路径下,此时rest服务总是访问不到,而在dubbox的说明中有如下文字:
注意:如果你是选用外部应用服务器做rest server,即配置:
<dubbo:protocol name="rest" port="8888" contextpath="services" server="servlet"/>
则必须保证这里设置的port、contextpath,与外部应用服务器的端口、DispatcherServlet的上下文路径(即webapp path加上servlet url pattern)保持一致。例如,对于部署为tomcat ROOT路径的应用,这里的contextpath必须与web.xml中DispacherServlet的<url-pattern/>完全一致:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
但是修改了service-provider.xml中contextpath为/provider/services也不行
报错信息如下:
com.alibaba.dubbo.rpc.RpcException: Since you are using server='servlet', make sure that the 'contextpath' property starts with the path of external webapp
at com.alibaba.dubbo.rpc.protocol.rest.RestProtocol.doExport(RestProtocol.java:104)
查看RestProtocol源码
String webappPath = servletContext.getContextPath();
if (StringUtils.isNotEmpty(webappPath)) {
webappPath = webappPath.substring(1);
if (!contextPath.startsWith(webappPath)) {
throw new RpcException("Since you are using server='servlet', " +
"make sure that the 'contextpath' property starts with the path of external webapp");
}
contextPath = contextPath.substring(webappPath.length());
if (contextPath.startsWith("/")) {
contextPath = contextPath.substring(1);
}
}
代码逻辑一目了然,if (!contextPath.startsWith(webappPath)) {
需要将service-provider.xml中contextpath修改为provider/services即可,不带/前缀
分享到:
相关推荐
3. **REST接口实现**:在Java代码中,会看到使用dubbox提供的API实现的REST服务,这些服务通常继承自dubbox的抽象类或实现了特定的接口。 4. **客户端调用示例**:项目可能包含一个简单的客户端应用,演示如何通过...
除了基础的使用,深入学习 Dubbox 还包括了解其内部工作原理,如 Remoting 层的通信机制、序列化与反序列化过程、服务治理策略的实现等。此外,结合实际业务场景,学习如何利用 Dubbox 的扩展点实现定制化功能,如...
DUBBOX 项目部署指南是阿里巴巴 SOA 服务化治理方案的核心框架,旨在提供高性能和透明化的 RPC 远程服务调用方案。以下是 DUBBOX 项目部署指南的详细知识点: 一、项目结构 DUBBOX 项目结构主要包括三个部分:REST...
Spring整合dubbox框架编写rest风格,项目使用maven构建,需要编译dubbo-2.8.4到本地的maven资源仓库,然后使用当前代码测试,不需要相应的web容器,将浏览器作为一个客户端访问URL。
在本文中,我们将深入探讨Dubbox的部署过程以及如何与Zookeeper配合实现分布式服务。 首先,我们需要理解Dubbox的核心组件。Dubbox提供了一个服务治理平台,它包括服务提供者(Provider)、服务消费者(Consumer)...
Dubbox 是一款基于阿里巴巴 Dubbo 框架的扩展,它增强了原生 Dubbo 的功能,使得在分布式服务环境中能够更高效地管理和部署服务。Dubbox 主要关注于微服务架构中的服务治理和服务发现,是分布式系统开发的重要工具。...
在本主题中,我们将详细探讨如何使用dubbox2.8.4版本的admin和monitor模块进行war包的部署,以便管理和监控你的Dubbo服务。 首先,`dubbox2.8.4 admin`是Dubbo的管理组件,它提供了一个Web界面,允许开发者对Dubbo...
jfinal 与dubbox 和 rest的 简单列子,不过jfinal 在其中使用的比较少,大多是基于java写的,dubbox 则是在 dubbo的基础上进行的扩展,运行示例的话,必须要有 dubbo admin的管理服务和zookeeper 服务。注意 这是个...
通过使用`dubbox`,开发者可以轻松地在分布式环境中构建微服务架构,使得服务间能够透明地进行通信。`dubbox`支持多种协议,如Dubbo、HTTP、REST等,这使得它能够与各种类型的客户端进行交互,极大地提高了系统的互...
Dubbox 是一个基于 Spring 和...通过研究这些内容,你可以深入了解 Dubbox 的工作原理,定制化自己的服务治理框架,或者排查和解决在使用过程中遇到的问题。记得在使用前先阅读官方文档,以便更好地理解和运用 Dubbox。
【标签】"dubbox"明确了我们讨论的主题,这个框架主要应用于分布式系统中的服务调用和服务治理。dubbox在Dubbo的基础上增加了如REST支持、Zookeeper注册中心、Feign客户端等新特性,使得它更适用于现代微服务架构。 ...
- **Spring**:将Dubbo中使用的Spring版本由2.x升级到了3.x,减少了版本冲突的问题。 - **ZooKeeper客户端**:更新了ZooKeeper客户端至最新版本,修复了旧版本中的一些Bug。 ##### 2.5 支持基于Java代码的Dubbo配置...
除了以上核心功能,Dubbox源码的阅读可以帮助开发者深入理解其内部实现,比如服务调用的完整流程、如何处理网络通信问题、以及如何优化服务性能等。同时,提供的资源可能包括示例代码、教程文档、社区讨论等,这些都...
【标题】"已经打包好的dubbox示例"所涉及的知识点主要集中在使用dubbox这一框架构建服务提供者(Provider)和服务消费者(Consumer)的实践中。dubbox是基于Dubbo的扩展版本,它提供了更多的特性,如RESTful支持、...
通过这个压缩包,开发者可以学习到如何配置dubbox的XML或注解方式,如何在Spring MVC中调用dubbox的服务,以及如何处理服务调用的异常。同时,还能了解到如何进行单元测试和集成测试,确保服务的稳定性和可靠性。总...
为了使用这些Maven编译包,你需要在你的Maven项目中添加对应的依赖,这样就可以在你的项目中直接引用Dubbo或Dubbox的服务。具体操作如下: 1. 在`pom.xml`文件中添加依赖: ```xml <groupId>...
网关系统目的我们服务框架使用的是dubbox(这个不用再多描述了),内部系统调用使用的是dubbo协议;而对于前端提供服务则使用rest协议。前端应用面临许多rest服务,为了解决调用的统一,所以需要一个网关系统。为什么...
7. **Java Web应用程序(war)**:war文件是一种标准的Java Web应用程序打包方式,包含所有必要的类、资源和配置文件,可以直接在Servlet容器中部署运行。 8. **源码分析**:通过dubbox-master.zip,开发者可以深入...