|
| 1 | +##七牛设置notifyURL没有收到回调 |
| 2 | + |
| 3 | +在使用七牛进行数据处理时用户可以使用<persistentId>来主动查询持久化处理的执行状态,具体查询方法是发送一个Get请求:http://api.qiniu.com/status/get/prefop?id= |
| 4 | +可以参考: |
| 5 | +http://developer.qiniu.com/docs/v6/api/reference/fop/pfop/prefop.html |
| 6 | + |
| 7 | +但是调用查询的成本比较高,还得起脚本实时去遍历查询,如果能回调,就可以省掉这个工作了。 |
| 8 | + |
| 9 | +正好七牛这边针对上传预转持续化和触发持续化分别提供persistentNotifyUrl和notifyUrl讲处理结果POST到用户业务服务器,用户那边设置解析打印出处理结果就可以了。 |
| 10 | + |
| 11 | +那么问题来了,有的用户在使用过程中出现接受不到处理的结果,这种情况一般都是用户那边自己的问题,那应该怎样处理呢? |
| 12 | +1.检查下用户设置的persistentNotifyUrl以及notifyUrl,必须是公网上可以正常进行POST请求并能响应HTTP/1.1 200 OK的有效URL,可以使用curl访问下看是否满足这个条件。 |
| 13 | +另外,七牛这边发送body格式为Content-Type为"application/json"的POST请求,用户回调服务器需要按照读取流的形式读取请求的body才能获取。 |
| 14 | + |
| 15 | +2.如果第一个条件满足的情况,我们可以检测下用户后端设定的接收回调处理的程序是否是正常的,对此,我们可以主动POST一个数据给用户的回调服务器: |
| 16 | +eg:curl -vX POST "URL" -d "name=123.jpg" |
| 17 | +用户那边如果能够正常打印出该内容,说明用户的接收程序是没有问题的。 |
| 18 | + |
| 19 | +3.如果以上条件都没有问题的情况下,应该是用户持续化处理本身的代码是有问题的,应该是用户设置的persistentNotifyUrl或者notifyurl没有设置成功,这个时候我们可以让用户在程序里面调试打印下这个URL的值,或者提供下返回的persistentID我们可以请求下获得ReqID然后在日志机上查询下是否是正确的,比如,之前查到的一个结果如下: |
| 20 | +url.Values{"notifyURL":[]string{""}, "force":[]string{""} |
| 21 | +这就明显看出用户设置的notifyURL是没有传进去的。 |
| 22 | + |
| 23 | +这时,我们可以让用户提供下代码,检查下用户代码参数设置是否是有问题的,因为,**不同的语言对于notifyURL参数的写法是有问题的,比如java里面写法是notifyURL,而PHP里面该字段是notifyUrl**,经排查果然,用户用的是PHP语言,但是里面设置notifyURL字段应该是: |
| 24 | +$notifyUrl = 'http://notify.fake.com'; |
| 25 | +但用户设置的是$notifyURL,参数设置是有问题的 |
| 26 | + |
| 27 | +另外,可以参考java中Servlet回调处理的代码: |
| 28 | + |
| 29 | +``` |
| 30 | +public class notify extends HttpServlet { |
| 31 | +
|
| 32 | + public notify() { |
| 33 | + super(); |
| 34 | + } |
| 35 | +
|
| 36 | + public void doGet(HttpServletRequest request, HttpServletResponse response) |
| 37 | + throws ServletException, IOException { |
| 38 | +
|
| 39 | + response.setContentType("text/html"); |
| 40 | + response.setCharacterEncoding("gb2312"); |
| 41 | + PrintWriter out = response.getWriter(); |
| 42 | + |
| 43 | +
|
| 44 | + request.getInputStream(); |
| 45 | + |
| 46 | + String line=""; |
| 47 | + BufferedReader br=new BufferedReader(new InputStreamReader( |
| 48 | + request.getInputStream())); |
| 49 | + StringBuilder sb = new StringBuilder(); |
| 50 | + while((line = br.readLine())!=null){ |
| 51 | + sb.append(line); |
| 52 | + } |
| 53 | + System.out.println( sb); |
| 54 | + |
| 55 | + } |
| 56 | +} |
| 57 | +``` |
| 58 | + |
0 commit comments