常见问题
IMS错误码总览
IMS增加了一个错误码到宏解释的小工具,非常方便查看错误代码。
以下错误码为IMS自身设定的,帮助开发和运维人员更加准确的锁定错误原因,提升开发和运维效率。(错误码不断增加,以下可能不全)
-99 | ERR_OVERFLOW | 内存溢出 |
---|---|---|
-100 | ERR_UNKNOWN | 未知错误 |
-1001 | ERR_PARAMETER_NULL | 参数为空 |
-1002 | ERR_MEMORY_NOT_ENOUGH | 内存不足 |
-1003 | ERR_NOT_FOUND | 指定对象未找到 |
-1004 | ERR_MAP | 映射错误 |
-1005 | ERR_SOCKET_WRITE | SOCKET写入失败 |
-1006 | ERR_SOCKET_READ | SOCKET读取失败 |
-1007 | ERR_FILENAME_TOO_LONG | 文件名称过长 |
-1008 | ERR_OPEN_FILE | 打开文件失败 |
-1009 | ERR_FILE_SIZE | 文件过大、文件为空 |
-1010 | ERR_SENDFILE | 发送文件失败 |
-1011 | ERR_NO_CONFIG | 配置文件错误 |
-1012 | ERR_LOGIC | 逻辑错误 |
-1014 | ERR_CONNECT_LN | 连接到负载均衡失败 |
-1015 | ERR_REGISTER_IP_INVALID | 注册IP无效 |
-1016 | ERR_TOO_MANY_CONNECT | 连接过多 |
-1017 | ERR_LOGIN | 登录失败 |
-1018 | ERR_SERVER | 服务器异常(服务器未启动,ip配置错误,网络问题) |
-1019 | ERR_USER_EXIST | 用户已经存在 |
-1020 | ERR_USER_NOT_EXIST | 用户不存在 |
-1021 | ERR_PARAMETER | 参数错误 |
-1022 | ERR_IP_DENY | 拒绝连接该IP |
-1023 | ERR_IP_NOT_ALLOW | 不允许连接该IP |
-2001 | ERR_TOPIC_EXIST | topic已经存在 |
-2002 | ERR_TOPIC_NOT_EXIST | topic不存在 |
-2003 | ERR_TOPIC_OVER_MAX | topic数量超过配置最大容量 |
-2004 | ERR_TOPIC_EXIST_IN_LN | topic在负载均衡中已经存在 |
-2005 | ERR_TOPIC_AUTHORITY_INVALID | 无权限访问Topic |
-2006 | ERR_TOPIC_NOT_ONLINE | Topic当前不可用 |
-2010 | ERR_QUEUEFILE_NOT_EXIST | 消息队列文件不存在 |
-2101 | ERR_STACKFILE_NULL | 堆栈文件为空 |
-2102 | ERR_STACKFILE_ZERO | 堆栈文件为0字节文件 |
-2103 | ERR_STACKFILE_FULL | 堆栈文件已满 |
-2201 | ERR_QUEUE_EXTEND_TOO_LOW | 队列扩展过低,不能满足当前队列需求 |
-2202 | ERR_QUEUE_EXTEND_TOO_HIGH | 队列扩展过高,当前设备容量不支持 |
-2301 | ERR_CMS_NOT_EXIST | 云消息服务器不存在 |
-2401 | ERR_CQ_FULL | 循环队列满 |
-2501 | ERR_PERM | 对IMS操作没有权限 |
-3008 | 超时 | |
-9001 | ERR_DOMAIN_NAME | 域名错误 |
安装部署常见问题解答
1. ims能不能一键部署?
解答:通过控制台可以实现多台机器自动安装ims企业版。
2. 如果把IMS LN和IMS下面的db和redo下的文件文件全部删除,是否就相当于重新安装了IMS ?
解答:除上述两个目录,还要删除queue和redo_bak下所有文件,就相当于重装了IMS。
运维管理常见问题解答
1.从ims的消息队列读消息的时候,如果消息队列为空,并且返回错误码-2,如果队列长时间为空的话,CPU占用较高改怎么处理?
解答:建议处理方式:当检测到错误码-2时,休眠一段时间,比如1ms。
其他建议:以做一个依次递增时间,比如第一次,现在有数据突然没数据,你可以休眠1ms,第二次还是没有数据可以多休眠一会,依次递增, 这样就算有延迟的话也只有第一个有延迟。
2. 企业版使用cmspManager -A时,每次显示的Topic名字列表不一样。
解答:在企业版中使用cmspManager –A命令时,cmspLN 每次会动态分配一个IMS Server,此时cmspManager –A显示的Topic名字列表就是该IMS Server的Topic 名字列表,由于每次连接的IMS Server可能不一样,就会导致每次显示的Topic名字列表不一样。如果想显示某一个IMS Server的Topic名字列表,请将环境变量设为CMSP_CLOUD=1,CMSP_LN_IP和CMSP_LN_PORT设为具体IMS Server的IP和端口。
3. IMS和东方通消息中间件、阿里云MNS对比,有哪些优势?
解答:目前国内开展商用云消息服务的主要是阿里云MNS和东方通消息中间件。目前阿里云MNS和东方通消息中间件支持的功能,IMS也支持。与阿里云MNS对比,IMS还有一些独特的功能,如支持大消息、点对点传输、消息复制、消息分发、严格的先进先出等;与东方通消息中间件对比,IMS还有一些明显优势,如云消息支持、大消息和大队列、高性能和大吞吐量等;总之,IMS具备更高的性价比和性能、更加易于使用,易于部署于各种云环境中。
4. Oracle服务名是什么?
解答:Oracle服务名可以在数据库中进行查询,查询语句为:show parameter service_name; 。
使用常见问题解答
1. 启动ims -n参数是cpu核心数吗 ?
解答:-n后面的参数是线程数,不要大于cpu核心数最能体现ims的性能。大于了也不是不可以,但是ims性能会有所影响。
2. 异常退出会加锁
解答:在正常情况下ims可以做到自动加减锁,在异常情况下不能自动解锁,需要手动解锁。只要不调用接口就算异常退出,比如在还有api在进行的时候退出了。Ctrl+c, kill -9 ,都属于异常情况。可以使用cmspManager -u -T topicname 进行解锁。
3. 使用cmspManager或IMS接口连接IMS时,返回错误码-1017
解答:-1017 属于认证错误,有如下几种情况会导致以上错误:
1.用户名错误。
2.口令错误。
3.使用cmspManager或使用IMS C/C++ /JAVA API的IMS客户端所在机器和IMS Server不在同一个网段,这时应该在接口所在机器配置CMSP_LOCAL_IP环境变量。CMSP_LOCAL_IP环境变量对应的IP地址可以到IMS的log目录的日志文件里获得,显示非法IP地址,把此IP地址配置到CMSP_LOCAL_IP 环境里。
4. 使用IMS 接口连接IMS时,返回错误码-1018
解答:有如下几种情况
1.网络不通,通过ping IMS所在机器IP来检查。
2.有防火墙,请关闭IMS所在机器的防火墙。
3.IMS 服务没有启动,请启动IMS 服务。
4.使用接口所在机器和IMS机器不在一个网段,这时应该在接口所在机器配置CMSP_LOCAL_IP和CMSP_CLOUD两个环境变量,IP地址可以到IMS的log目录的日志文件里获得,显示非法的IP地址,把此IP地址配置到CMSP_LOCAL_IP环境里。CMSP_CLOUD根据云版配置为1,标准版配置为0。
5. 企业版使用cmspManager -A时,每次显示的Topic名字列表不一样
解答:在企业版中使用cmspManager –A命令时,cmspLN 每次会动态分配一个IMS Server,此时cmspManager –A显示的Topic名字列表就是该IMS Server的Topic 名字列表,由于每次连接的IMS Server可能不一样,就会导致每次显示的Topic名字列表不一样。如果想显示某一个IMS Server的Topic名字列表,请将环境变量设为CMSP_CLOUD=0,CMSP_LN_IP和CMSP_LN_PORT设为具体IMS Server的IP和端口。
6. 企业版使用cmspManager -A显示的Topic名字列表不全
解答:cmspManager –A只能某个具体IMS Server的全部Topic 名字列表,如果想显示IMS 集群所有Topic的列表,请用cmspManager --lnAllTopic (注意lnAllTopic大小写,其前面为两个短横线)命令,环境变量设为CMSP_CLOUD=1,CMSP_LN_IP和CMSP_LN_PORT设为LN的IP和端口。使用控制台也可以看到所有Topic名字列表。
7. 使用cmspManager 或IMS接口连接IMS时,返回错误码-2002
解答:-2002表示Topic不存在,C/C++ 对应的宏为ERR_TOPIC_NOT_EXIST,有如下几种原因:
1.Topic名字输入错误,如大小写错误,Topic T1 和Topic t1是不一样的。
2.Topic名字确实不存在。
3.企业版中连接到某具体IMS Server,Topic不在该Server中。
4.权限问题,每个Topic属于具体的某个用户,默认情况下user1是不能访问user2创建的Topic。
5.对于Topic名字带空格的,要用引号引起来,如“my topic”。
8. 使用cmspManager 或IMS 接口创建或删除Topic时,返回错误码-1014
解答:-1014 属于连接LN错误,C/C++ 对应的宏为ERR_CONNECT_LN,有如下几种情况会导致以上错误:
1.LN被关闭。
2.LN未启动
3.IMS Server到LN间网络异常
4.IMS Server配置的环境变量不对,应设为CMSP_CLOUD=1,CMSP_LN_IP和CMSP_LN_PORT设为LN的IP和端口。
9. 使用cmspManager 或IMS 接口访问IMS时,返回错误码-1005 或-1006
解答:-1005 和-1006 属于socket类错误,-1005对应的宏为ERR_SOCKET_WRITE, -1006对应的宏为ERR_SOCKET_READ,有如下几种情况会导致以上错误:
1.API使用不正确的socket Id。
2.connectCMSP函数本身返回值是负值。
3.客户端和IMS Server间的网络断开,如IMS重启。
10. 使用cmspManager 或IMS 接口连接IMS时,返回错误码-3008
解答:-3008错误原因为超时。有如下几种情况会导致以上错误:
1.服务端忙。
2.网络不好。
3.配错了IP和端口。
4.防火墙限制。建议修改防火墙设置,开放ims相关端口。
11. getMqGroup这个方法是把当前topic所有的消息都取出来吗?
解答:是取多条,但不一定是全部,V6.3.6版以后最后一个参数可以限制取出的最大条数,如值为100,则最多取出100条。
开发常见问题解答
1. C/C++开发中需要的头文件在哪里可以找到?
解答:解压目录下的include目录下。
2. 能否在cmspManager命令中包含用户名和密码用来批处理一些事情?
解答:可以,在原命令的基础上,添加 -U 用户名 -P 密码。