dubbo forbid service的解决办法
来源:互联网 发布:淘宝拍卖手表是真的吗 编辑:程序博客网 时间:2024/05/22 14:02
017-05-31 10:36:54.523 [http-nio-8080-exec-5] ERROR c.h.pdl.web.APIExceptionHandler - Unknown Exception, URI = /payday-loan-core/api/sms/send_forget_password_codecom.alibaba.dubbo.rpc.RpcException: Forbid consumer 10.30.50.239 access service com.htouhui.sms.service.MessageQueueService from registry 10.30.50.239:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist).
这两天经常被这个dubbo的错误所困扰,其实解决完之后才发现其实并没有那么难,最核心的就是要保证服务器的provider和consumer之间的版本要对应上,如果没有对应上,就会报这个错误,其实这个错误挺误导人的,因为错误上说的是拒绝这个consumer调用dubbo的服务,给出的提示是查看访问列表,黑名单白名单,但是读过源码才知道,其实就是consumer要调用provider没有找到,可以简单的理解成NullPointerException。
还有我看到很多同事在面对这个问题的时候,处于一种比较迷茫的状态,不知道该如何入手,其实我在刚开始接触的时候也是如此,不知道该怎么办,写这个文章就是让大家有一个参考,提高解决该类问题的效率。
知己知彼方能百战不殆,要想快速的解决问题,首先要先了解当前系统是怎么运行的,知道了来龙去脉以后就好解决问题了。
这里要说明的是有两大块内容,一个是测试服务器,一个是预发和正式的服务器,其实原理一样的,但是在实际使用中还是有一些不同,所以都要提一下。
首先是测试环境下:
测试环境的编译和部署是靠.gitlab-ci.yml文件进行的,所以测试环境的核心就在这个文件中,理解这个文件有助于理解整个的持续集成是如何实现的。首先姑且不论里面的内容是什么,代表什么,它首先是一个配置文件,YAML格式的配置文件,懂得YAML的格式是必须的。
首先主要的内容是一些变量的定义:
variables: TOMCAT_PORT: "17771" DUBBO_PORT: "20892" DOCKER_IMAGE_VERSION: "1.0"
这里定义了一个dubbo的端口号:DUBBO_PORT,docker镜像的版本:DOCKER_IMAGE_VERSION,这个端口号是如何使用的呢,可以看下面的配置:
script: - docker stop sms-gateway-$CI_BUILD_REF_SLUG || true - docker rm -f sms-gateway-$CI_BUILD_REF_SLUG || true - docker run -d -p $TOMCAT_PORT:8080 -p $DUBBO_PORT:$DUBBO_PORT -e DOCKER_IP=10.171.54.98 -e RUNTIME_PROFILE=test -v /root/app_logs/sms-gateway-$CI_BUILD_REF_SLUG:/root/logs/sms-gateway --name sms-gateway-$CI_BUILD_REF_SLUG -t registry.cn-beijing.aliyuncs.com/htouhui/sms-gateway:$DOCKER_IMAGE_VERSION
这里我虽然无法得知gitlab是如何调用这些配置的,但是并不妨碍我去理解这些配置。最核心的部分就是docker run后面的参数了,其中参数说明如下:
-p, --publish value Publish a container's port(s) to the host (default [])-e, --env value Set environment variables (default [])-v, --volume value Bind mount a volume (default [])--name string Assign a name to the container-t, --tty Allocate a pseudo-TTY
在docker中-p参数可以指定容器中对主机映射的端口,如上面的例子,-p 17771:8080 的意思也就是说,将docker中的端口17771映射到8080的端口上,当我们从外部访问的时候,通过8080端口就可以访问到docker中的17771端口提供的服务了,同理,
接下来再看application.yaml配置中的情况:
dubbo: registry: address: zookeeper://123.57.8.180:2181 port: 20892 sms-gateway: provider: version: 0.0.1.local.sms-gateway
当然还有dubbo的配置了
<dubbo:application name="sms-gateway"/><!-- 向指定注册中心暴露服务地址 --><dubbo:registry address="${dubbo.registry.address}"/><!-- 用dubbo协议在指定端口暴露服务 --><dubbo:protocol name="dubbo" port="${dubbo.registry.port}"/>
这里可以看到,dubbo将上面yaml配置中的文件读取到xml配置文件中,这个例子也就是变成如下内容:
<dubbo:application name="sms-gateway"/><!-- 向指定注册中心暴露服务地址 --><dubbo:registry address="zookeeper://123.57.8.180:2181"/><!-- 用dubbo协议在指定端口暴露服务 --><dubbo:protocol name="dubbo" port="20892"/>
也就是说,dubbo在zookeeper上注册的端口号为20892,也就是说,docker在暴露dubbo在主机上的端口号必须为20892,不然就找不到要注册的dubbo了,所以肯定就注册不成功了。
现在的问题是,dubbo容器内部的端口是如何指定的呢,也就是
要特别注意的是:
<dubbo:service interface="com.htouhui.pdl.user.UserReader" ref="defaultUserReader" timeout="5000" version="${dubbo.hxiaofei.provider.version}"/>
这里的version格外重要,由于使用变量的缘故,我们经常无法很直观的判断出provider和consumer的version是否一致,如果不一致则肯定也会报各种错误。
- dubbo forbid service的解决办法
- dubbo :Forbid consumer
- dubbo : forbid consumer
- com.alibaba.dubbo.rpc.RpcException: Forbid consumer 18.18.16.229 access service com.alibaba.dubbo.mo
- Forbid consumer 127.0.0.1 access service com.alibaba.dubbo.rpc.service.GenericService from registry
- com.alibaba.dubbo.rpc.RpcException: Forbid consumer 192.168.200.126 access service com.summersoft.ts
- 解决dubbo问题:forbid consumer
- 解决dubbo问题:forbid consumer
- 解决dubbo问题:forbid consumer
- 解决dubbo问题:forbid-consumer/
- 解决dubbo问题:forbid consumer
- 解决dubbo问题:forbid consumer
- DUBBO报错 Forbid consumer
- 解决dubbo问题:forbid consumer
- dubbo的注解配置问题:dubbo的服务端service注解和spring的service、有冲突
- dubbo.xsd 报错的解决办法
- [DUBBO] Unexpected error occur at send statistic, cause: Forbid consumer 192.168.3.151 access servic
- Web Service未定义的解决办法
- R语言-评分卡模型验证(ROC,KS,AIC,BIC)
- 给元素添加边框样式
- Oracle中如何获取系统当前时间
- Opencv3的浅拷贝
- rman在nfs文件系统上备份报错(NFS file system where the file is created or resides is not mounted with correct )
- dubbo forbid service的解决办法
- MVC概念
- 安装MySQL最后一步出现错误Error Nr.1045解决方法
- Python爬虫入门三之Urllib库的基本使用
- 让EntityFramework6支持SQLite
- 算法与数据结构课程设计(Floyd算法)
- codeforces——155A——I_love_\%username\%
- 27、字符串的排列
- 计算Java中任意一个方法的执行时间的工具类