常见问题

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 密码。