apache / dubbo-rpc-jsonrpc

The Json rpc module of Apache Dubbo project
https://dubbo.apache.org
Apache License 2.0
189 stars 101 forks source link

serverlet #9

Closed whybeyoung closed 8 years ago

whybeyoung commented 8 years ago

作者你好,感谢你回复。 配置感觉我有一步骤不对, 文中说到的:“ 注意,如果使用servlet派发请求:

协议的端口必须与servlet容器的端口相同, 协议的上下文路径必须与servlet应用的上下文路径相同。“ 这句话怎么理解 以及配置呢,感谢回复谢谢

wuwen5 commented 8 years ago

参考 http://dubbo.io/Http+Protocol-zh.htm

协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。 默认为根目录.

对应tomcat server.xml中的

<Context path="foo" docBase="...." >
whybeyoung commented 8 years ago

额, 看起来我配置没有错, 默认8080 , 但是我用python dubbo client 可以获取服务列表,但是调用的时候 总是报 dubbo_client.rpcerror.ConnectionFail: DubboError(504): connect failed http://192.168.17.17:8080/itest.xxxxk.business.service.ItestService 手动访问该地址 也是404.. 请问还有什么地方需要特殊配置么? dubbo端 我的配置是

<dubbo:protocol name="http" host="192.168.17.17" port="8080" server="servlet" />
    <dubbo:protocol name="jsonrpc" host="192.168.17.17" port="8080" server="servlet" />
    <dubbo:provider protocol="jsonrpc" />
<dubbo:service interface="itest.xxxxk.business.service.ItestService" ref="itestService" protocol="jsonrpc" />

纠结两天了,还请作者大大 给个方向吧。。我原本以为是severlet端口不对,我tomcat的端口是默认的。。

wuwen5 commented 8 years ago

504是超时吧,看下是不是接口超时了呢?

用curl 测试下吧

curl -i -H 'content-type: application/json' -X POST -d '{"jsonrpc": "2.0", "method": "isPhoneNoLimit", "params": [ "MOBILE", "130000", "A001"],
         "id": 1 }' 'http://127.0.0.1:18080/com.ofpay.api.PhoneNoCheckProvider'
whybeyoung commented 8 years ago

我windows执行这个curl貌似执行不了 ,用的python的 urllib也就是本项目下面的python的例子,POSTmethod+ 参数过去 返回执行结果为空。 我的是配合本地的一个zookeeper中心做的服务发现

wuwen5 commented 8 years ago

接口超时时间默认是1秒,你确认下服务端是否收到了请求?

wuwen5 commented 8 years ago

web.xml的配置也发下看看

JoeCao commented 8 years ago

为什么同时启动了http协议?

whybeyoung commented 8 years ago

web.xml 如下 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

ServiceProvider
<filter>
    <filter-name>jfinal</filter-name>
    <filter-class>com.jfinal.core.JFinalFilter</filter-class>
    <init-param>
        <param-name>configClass</param-name>
        <param-value>com.itest.provider.config.ProviderConfig
        </param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>jfinal</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
    <servlet-name>dubbo</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>dubbo</servlet-name>
     <url-pattern>/*</url-pattern>

whybeyoung commented 8 years ago

啊应该也是不是zookeeper问题, dubbo zookeeper都在本地, print user_provider('get_daily_active') File "build\bdist.win-amd64\egg\dubbo_client\rpclib.py", line 62, in call File "build\bdist.win-amd64\egg\dubbo_client\rpclib.py", line 46, in call dubbo_client.rpcerror.ConnectionFail: DubboError(504): connect failed http://192.168.17.17:8080/itest.xxxxk.business.service.ItestService dubbo 这个地址 http://192.168.17.17:8080/itest.xxxxk.business.service.ItestService 手动访问也是无法访问的,tomcat的日志报404, client报504, 但是dubbo的服务列表能拿到,就是调用的具体method的时候出错。现在就是这个问题,服务端超时1s的话,我本机应该不会超过这个值吧, 抓包的话 8080端口的链接都建立不起来呢,所以就是没访问到8080的服务

wuwen5 commented 8 years ago

http://192.168.17.17:8080/ 能正常访问吗? 手动访问应该是返回500的,拒绝get请求,但是你的返回的404 .

检查下启动日志 有没有异常信息

whybeyoung commented 8 years ago

我dubbo服务是正常起来的, tomcat这个8080根目录 404 和手动访问 该地址 返回404应该也没什么关系吧?页面不存在嘛。。。 dubbo服务起来的时候 我在java里是执行了一次调用一个具体服务,是可以成功的。 但是用python的 python-dubbo-client 通过zookeepr注册,拿到服务列表, 调用一个具体方法就出错。。

可以留个联系方式,帮忙看一下么,感激不尽

wuwen5 commented 8 years ago

@berlinsaint 你方便留个QQ号吗? 或者给我发邮件 wuwen5

whybeyoung commented 8 years ago

我扣扣15855115899,感谢!