版权声明 - KCXP操作手册

版权声明

本手册版权为深圳市金证科技股份有限公司所有，未经本公司书面许可，任何公司、单位和个人不得以任何手段复制本书的全部或部分内容。

金证科技、KIINGDOM是金证公司的注册商标。

KCXP是金证公司的产品。

深圳市金证科技股份有限公司 版权所有


修订历史 - KCXP操作手册

修订历史

版本号 | 日期 | 状态 | 修订人 | 摘要
v1.0 | 2015-02-09 | C | 徐丹丹 | 初稿。增加修订历史。
v1.1 | 2015-03-12 | M | 徐丹丹 | 修改“查看KCXP版本”章节：增加新版本KCXP查看版本号的方法
v1.2 | 2015-03-25 | A | 徐丹丹 | 在“功能模块介绍”中增加“协议管理”、“日志设置”
v1.3 | 2015-04-17 | A | 徐丹丹 | 在“转发插件BpTransmit.dll的配置”和“流量控制规则的配置”中增加对于业务报文中的字段，若未送该字段和送的值为空的情况下，规则该如何写的说明
v1.4 | 2015-04-24 | A | 徐丹丹 | 在“流量控制规则的配置”中增加“排队等待”处理方式的说明
v1.5 | 2015-05-04 | A | 徐丹丹 | 增加“KCXP保活机制的设置”章节。
v1.6 | 2015-05-14 | A | 徐丹丹 | 增加5.1章节——KCXP中的限制
v1.7 | 2015-06-12 | M | 徐丹丹 | 修改4.7.3章节“接入控制如何控制”的描述
v1.8 | 2015-07-28 | A | 徐丹丹 | 接入控制中增加对接入用户和队列操作权限的控制
V1.9 | 2015-10-15 | M | 徐丹丹 | 在集群的“特别说明”中举例说明
V1.9.1 | 2015-11-12 | M | 徐丹丹 | 修改4.7.3章节“接入控制如何控制”的描述：在队列控制时，若匹配的规则的状态为0，应不控制，继续执行操作
V2.0 | 2016-03-25 | A | 徐丹丹 | 增加“将XPCC命令的结果导出至文件”、“制作XPCC命令的批处理文件”、“KCXP界面操作路由”、“KCXP界面操作远程队列”、“规则中的函数说明”章节
V2.1 | 2016-06-15 | M | 徐丹丹 | 在“KCXP版本”章节说明10版本不比8版本高
V3.0 | 2016-08-05 | M | 徐丹丹 | 1、 在“第三部分XPCC命令介绍”中增加“路由路径” 2、 在“日志设置”—“消息日志”中，增加10.20(8.20)版本的显示
V3.1 | 2016-09-08 | M | 徐丹丹 | 修改“XPCC命令介绍”的“远程队列”中，图片显示的xpcc命令解释不对的问题
V3.2 | 2016-10-21 | M | 徐丹丹 | 在4.1章节详细介绍KCXP的配置
V3.3 | 2017-02-10 | M | 徐丹丹 | 1、 更正“队列管理器名”长度限制为不超过20个字符 2、 6.20.20161221开始的kcxpmanager，自动配置put线程和get线程数分别为cpu核数的1倍和2倍
V3.4 | 2017-06-02 | A | 陈慧 | 增加“信息过滤”章节

状态标识：C – Created A - Added M - Modified D - Deleted


前言 - KCXP操作手册

前言


关于本手册 - KCXP操作手册

关于本手册

KCXP（Kingdom Communication eXchange Platform）是金证公司的通讯交换平台，本公司开发的所有业务系统均需要使用该产品进行通讯，本手册将介绍如何配置和使用KCXP。各种操作系统下的KCXP的配置和使用区别不大，除了在KCXP界面的操作，因此用户需要留意各章节所适用的操作系统。


名称解释 - KCXP操作手册

名称解释

KCXP（Kingdom Communication eXchange Platform）：金证通讯交换平台。

KCBP（Kingdom Core Business Platform）：金证核心业务平台。

KCXP界面：显示和管理KCXP的界面程序，即kcxpmanager.exe。windows操作系统下的程序，可监控 windows版的KCXP以及非windows版的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）。

XPCC：管理KCXP的命令程序。

节点：一个KCXP我们称之为一个节点。

消息：对使用它的应用程序有意义的字符串。

队列：存储消息的数据结构。由应用程序把消息放入队列或从队列中取出消息，是它的一些常规操作。

应用队列：由应用程序创建、打开并使用的队列。

传输队列：用于存储需要发到其他节点的消息的队列。

路由：在两个节点之间建立的一种连接关系，也叫级联。

路由表：多条路由信息记录的集合。

消息的生命周期：每个放入到KCXP的消息都有自己的生命周期，由调用者在放入队列时指定。

过期消息：在队列中存在时间超过了其生命周期的消息。


技术支持 - KCXP操作手册

技术支持

如果您有任何关于本软件或文档方面的问题，请通过电话、传真、Email联系金证科技股份有限公司客户服务中心，亦可进入金证网站寻求支持信息。

电话： 0755-83172999

传真：0755-82955667

Email：jzservice@mail.szkingdom.com

公司网站：http://www.szkingdom.com


第一部分 总则 - KCXP操作手册

第一部分 总则


1.1 KCXP简介 - KCXP操作手册

1.1 KCXP简介

KCXP属于消息类中间件，其主要功能是在不同的应用程序之间进行消息的传递——通过各应用程序往KCXP的队列中放、取消息来实现。

下边是KCXP的基本应用图：

图1-1-1 KCXP的基本应用图

上图中，KCBP和客户程序在业务系统中所扮演的角色不同，但对KCXP来说，它们都是连接KCXP、打开KCXP队列、往KCXP队列放/取消息，因此，在本手册中，我们把它们统一称为KCXP的客户端程序。


1.2 使用指南 - KCXP操作手册

1.2 使用指南

本手册首先将介绍XPCC的所有命令，然后再对KCXP各主要模块进行详细介绍（其中也会涉及到相应的XPCC命令）。

建议在读本手册之前，先读《KCXP安装手册.doc》 （非windows版的KCXP在使用前，请读KCXP主目录下的readme）。


第二部分 基础知识 - KCXP操作手册

第二部分 基础知识


2.1 查看KCXP服务路径 - KCXP操作手册

2.1 查看KCXP服务路径

对于windows版的KCXP，安装KCXP服务后，可到windows的服务中去查看KCXP服务的路径。

方法一：到“控制面板”中，双击“管理工具”，然后再双击“服务”。

方法二：在cmd中输入services.msc，回车。

都将弹出windows服务的界面，如下图所示：

图2-1-1 windows服务界面

在其中找到名称为“Kingdom Communication eXchange Platform”的服务，双击，查看其路径（如图2-1-2所示）：

图2-1-2 查看KCXP服务路径


2.2 查看KCXP版本 - KCXP操作手册

2.2 查看KCXP版本

对于windows版的KCXP，可以通过以下三种方式查看KCXP的版本信息。

1、 在KCXP界面点击“帮助”—“关于kcxpmanager”，

2、 点击KCXP界面的问号 [image] ，

都将弹出KCXP及kcxpmanager的版本信息，如下图所示：

图2-2-1 KCXP及kcxpmanager的版本信息

其中， [image] ，说明KCXP的版本号是10.12，大版本号是10版本，编译时间为2014年4月28日。

注：KCXP的大版本有两个：10和8，它们没有版本高低之分，只有在大版本号一样的情况下，才能比较版本高低（即10.1版本比10.0版本高，但不比8.8版本高），所以本文档说到适用版本时，会两个大版本同时说明。

对于10.15（8.15）及以上的KCXP，在KCXP启动日志（可从KCXP界面的“事件”标签页）中会显示该KCXP版本：

对于10.15（8.15）以下的非windows版KCXP，没有地方可以显示KCXP的版本信息，只能记住发布KCXP时说明的该次发布的版本号。


2.3 KCXP授权 - KCXP操作手册

2.3 KCXP授权

按照2.2章节查看KCXP版本，若如下显示：

图2-3-1 需要授权的KCXP

说明该版本的KCXP需要进行授权后才能使用，所以需要按照其提示，把该界面[]内的序列号发送给金证公司索取授权号


2.4 KCXP文件（夹）说明 - KCXP操作手册

2.4 KCXP文件（夹）说明

在发布的KCXP目录下，含有一系列的文件和文件夹，现作以下简单说明。

文件（夹）名 |  |  | 说明 | 备注
kcxpsvc.exe |  |  | KCXP主程序 | 非windows版的是kcxpmqm
kcxpmanager.exe |  |  | KCXP界面程序，显示和管理KCXP主程序的 | windows版才有。对于非windows版的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本），也可以被该程序监控
xpcc.exe |  |  | 管理KCXP的命令程序。点击KCXP界面的小黑框 [image] 打开该程序 | 非windows版的是xpcc，直接运行该目录的xpcc就可打开
vcredist_x86.exe |  |  | vs2008运行库的安装程序（64位的是vcredist_x64.exe） | windows版才有。对于不需要使用该安装程序的版本，其目录下不会有该文件
readme |  |  | 使用KCXP前的导读文件 | 非windows版才有
kcxp |  |  | KCXP的运行脚本 | 非windows版才有
kcxp.ini |  |  | KCXP主程序的基本配置文件 |
kcxpmanager.ini |  |  | kcxpmanager.exe的配置文件 | windows版才有
kcxpcli.ini |  |  | XPCC的配置文件 |
exit.ini |  |  | 转发插件transmit.dll（libtransmit.so）的配置文件 | 不使用transmit.dll（libtransmit.so），可以不用该文件
DLLFuncInfo.dat |  |  | 关于xpcc每个命令对应哪个插件的哪个函数的描述文件 |
kcxpexit.dat |  |  | 内部插件文件 | 删除该文件，就删除了该KCXP的所有内部插件。适用于kcxp_v8.8以下版本、kcxp_v10.11以下版本
kcxpmqm.dat |  |  | 队列管理器文件 |
kcxpplugin.dat |  |  | 加密压缩插件文件 |
kcxpqueue.dat |  |  | 应用队列文件 | 删掉该文件，就删除了该KCXP的所有应用队列
kcxprdef.dat |  |  | 远程定义（也叫远程队列、远程映射）文件 | 删除该文件，就删除了该KCXP的所有远程定义
kcxproute.dat |  |  | 路由文件 | 删除该文件，就删除了该KCXP的所有路由
kcxpuser.dat |  |  | 用户文件 |
operator.dat |  |  | 操作员文件 |
BpProtocol.dll |  |  | bp协议插件 | 非windows版的是libBpProtocol.so。在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才需要
KCBPPacketOpApi.dll |  |  | 解析bp协议的插件 | BpProtocol.dll、KcxpMakBpAnsPack.dll和ExitOnXML.dll需要。非windows版的是libKCBPPacketOpApi.so
KcxpMakBpAnsPack.dll |  |  | 组KCBP错误应答包的插件 | 非windows版的是libKcxpMakBpAnsPack.so。在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中并且使用KESB的路由转发或流量控制等功能时才需要
kcxpsharedmem.dll |  |  | 与客户端程序进程间通讯的插件 | 非windows版的是libkcxpsharedmem.so。在kcxp_R中才需要
kdutil.dll |  |  | 授权插件 | 在windows版的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才需要
kmmlog.dll |  |  | 写日志插件 | 非windows版的是libkmmlog.so。在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才需要
kmmmib.dll |  |  | mib插件 | 非windows版的是libkmmmib.so。在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才需要
Krdp_v100.dll |  |  | 组播通讯插件 | 非windows版的是libKrdp_v100.so。在kcxp_R中才需要
libeay32.dll、SSLeay32.dll |  |  | 支持OpenSSL的插件 |
mmsConfMan.dll |  |  | 与mmagent通讯的插件 | 非windows版的是libmmsConfMan.so。在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中并且使用kcmm监控或kesb才需要
mmsKcxpManager.dll |  |  | 处理mmagent关于kcmm命令的插件 | 非windows版的是libmmsKcxpManager.so。在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中并且使用kcmm监控才需要
mmsKcxpManager_kesb.dll |  |  | 处理mmagent关于kesb命令的插件 | 在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中并且使用kesb才需要，用该文件替换mmsKcxpManager.dll
ParserExpr.dll |  |  | 解析表达式的插件 | 非windows版的是libParserExpr.so。ExitOnXML.dll及KESB的路由转发或流量控制等功能时才需要
pcre.dll |  |  | 正则表达式库 | 非windows版的是libpcre.so。在kcxp_R中才需要
stlport.5.2.dll |  |  | STL库 | 在windows版的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才需要
XPCCCmdErr.lst |  |  | XPCC的错误码定义 |
client.pem、kcxproute.pem、server.pem |  |  | OpenSSL的证书 | 使用OpenSSL时才需要
BpProtocol.xml |  |  | 定义bp协议中字段名的文件 | 在windows版的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中，在KCXP界面填写消息路由规则和流量控制时需要用到
kcxpconnctrl.xml |  |  | 接入控制的配置文件 | 在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中使用接入控制功能才需要
kcxpexit.xml |  |  | 内部插件以及BpTransmit.dll的配置文件 | 在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才需要
kcxpflowctrl.xml |  |  | 流量控制插件以及BpFlowCtrl.dll的配置文件 | 在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中使用流量控制功能才需要
KcxpParam.xml |  |  | 定义KCXP字段名的文件 | 在windows版的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中，在KCXP界面填写消息路由规则和流量控制时需要用到
kcxperrdef.txt |  |  | KCXP界面对KCXP错误的相关定义 | 在windows版的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中，在KCXP界面进行错误码过滤时需要
.\api |  |  | 用户编写KCXP的客户端应用程序所需动态库和配置文件 |
.\doc |  |  | KCXP的文档帮助文件 |
.\exit |  |  | KCXP的内置插件、接入控制、流量控制等插件 |
.\exit | BpFlowCtrl.dll | 流量控制插件 |  | 在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才能使用
 | BpTransmit.dll | 新版路由转发插件
 | ConnCtrl.dll | 接入控制插件
 | FlowCtrl.dll | 管理流量控制的插件
 | transmit.dll | 老版路由转发插件 |  | 在kcxp_v8.8以下版本、kcxp_v10.11以下版本中才能使用
.\log |  |  | 日志文件的存放目录 |
.\memhq |  |  | memory行情 |
.\persit |  |  | 可靠消息的存放目录 |
.\plugins |  |  | 加解密以及压缩、解压缩的插件 |
.\Timer |  |  | 定时消息的存放目录 |
.\xpccdll |  |  | xpcc命令对应的处理插件 |
.\实验程序 |  |  | KCXP的测试程序kcxptest.exe以及它所需要的运行环境 |


2.5 KCXP的连接程序 - KCXP操作手册

2.5 KCXP的连接程序

KCXP做为一个在后台运行的服务端程序（windows系统中在任务管理中显示的进程名为kcxpsvc.exe，非windows系统中运行的是kcxpmqm），共有五类程序可以对它进行连接：

ü 第一类：客户端程序（使用KCXPAPI连接KCXP、可在队列放/取消息，并会在KCXP界面的“用户服务器”标签页中显示的所有程序，如kcxptest、KCBP以及我们通常所说的客户端程序，默认连接端口是21000）

ü 第二类：kcxpmanager.exe（也就是我们通常说的KCXP界面，默认连接端口是7020。非windows版的KCXP，在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中，也可以使用kcxpmanager.exe对其进行连接）

ü 第三类：XPCC（KCXP命令服务器，默认连接端口是5000）

ü 第四类：做为集群接入的KCXP（集群XP，默认连接端口是6006）

ü 第五类：做为路由接入的KCXP（路由XP，默认连接端口是20000）


第三部分 XPCC命令介绍 - KCXP操作手册

第三部分 XPCC命令介绍

XPCC，做为管理KCXP的命令程序，可以运行在各个平台上，用户通过输入命令的方式完成KCXP的管理工作。


3.1 启动XPCC - KCXP操作手册

3.1 启动XPCC

ü 对于windows版的KCXP，点击KCXP界面的小黑框 [image] 就可打开XPCC。

ü 对于其他系统的KCXP，在kcxpcli.ini中配置好要管理的KCXP的IP地址和端口 [image] 后，在KCXP的目录下执行xpcc，回车，也将启动XPCC。

图3-1-1 XPCC的启动


3.2 登录XPCC - KCXP操作手册

3.2 登录XPCC

需要使用XPCC的命令与KCXP交互，必须先登录XPCC。XPCC启动后，在其中输入user system，回车，再输入manage，回车，就可以成功登录XPCC了。

图3-2-1 XPCC的登录

如果XPCC的登录用户名或密码被其他人员改动了，需要向他人去获取，否则在密码输错三次后XPCC将自动退出。


3.3 退出XPCC - KCXP操作手册

3.3 退出XPCC

在XPCC登录之后，在其中输入quit或者exit，回车，就可退出XPCC了；对于windows版的XPCC，也可以直接点击其右上角的叉 [image] 进行退出。


3.4 将XPCC命令的结果导出至文件 - KCXP操作手册

3.4 将XPCC命令的结果导出至文件

XPCC做为一个终端显示，显示的内容长度有限，当某个XPCC命令的结果很长时，无法看全，这个时候就可以将命令结果导出到文件。

导出方法：在XPCC中输入命令后，再输入空格和大于号，最后再输入一个文件名，回车即可。接下来到KCXP主目录下去打开这个文件就可以了，结果已导入到该文件了。

例，把路由的结果导出至1.txt：disproute >1.txt

图3-4-1 将XPCC命令的结果导出至文件


3.5 制作XPCC命令的批处理文件 - KCXP操作手册

3.5 制作XPCC命令的批处理文件

我们还可以将XPCC的命令做成批处理文件，放在KCXP目录下，直接双击运行（对于非windows版，在终端输入批处理文件名运行）。示例如下：

例，我们要在某KCXP（其IP地址为192.168.150.128）上增加一条路由，并增加一条远程队列，我们的做法是：在该KCXP的目录下创建文件（暂命名为test.dat），文件内容如下，之后再运行该文件即可。

xpcc -a 192.168.150.128 -o 5000 -u system -p manage -c "addroute -n 11000001 -m xudd -p 1 -a 192.168.150.1 -o 20000 -t 0 -u KCXP00 -w 888888 -d 0 -c 1 -r 0"

xpcc -a 192.168.150.128 -o 5000 -u system -p manage -c "addrdef -n req -c 11000001 -d req_yyb -s 0"

图3-5-1 XPCC批处理文件及运行


3.6 help - KCXP操作手册

3.6 help

命令名： help

命令功能：查看XPCC的所有命令

应用举例：help

图3-6-1 help命令


3.7 节点 - KCXP操作手册

3.7 节点


3.7.1 查看节点信息 - KCXP操作手册

3.7.1 查看节点信息

命令名： dispnode

命令功能：查看节点信息以及该节点用于客户端连接和路由连接的网络地址信息。

应用举例：dispnode

图3-7-1 dispnode


3.7.2 修改节点信息 - KCXP操作手册

3.7.2 修改节点信息

命令名： modnode

命令功能：更改节点信息

命令描述：modnode -[n] -[d] -[c] -[m]

-n 节点名称

-d 描述

-c 节点编号

-m 队列管理器名

应用举例：modnode -n a -d test -c 12345678 -m b

图3-7-2 modnode


3.8 队列管理器 - KCXP操作手册

3.8 队列管理器


3.8.1 显示队列管理器的信息 - KCXP操作手册

3.8.1 显示队列管理器的信息

命令名： dispqm

命令功能：显示队列管理器的属性和状态

应用举例：dispqm

图3-8-1 dispqm


3.8.2 设置队列管理器属性 - KCXP操作手册

3.8.2 设置队列管理器属性

命令名： setqmattr

命令功能：设置队列管理器的属性

命令描述：setqmattr -[d] -[h] -[p] -[s]

-d 修改队列描述

-h 修改最大句柄数，其取值范围是0<h<=1024

-p 修改最大优先级，其取值范围是0<=p<=19

-s 修改队列管理器状态

0：ACTIVE

1：STOP

2：PAUSE

3：DISABLE

应用举例：setqmattr -d test -h 1024 -p 5

图3-8-2 setqmattr


3.8.3 停止队列管理器 - KCXP操作手册

3.8.3 停止队列管理器

命令名： stopqm

命令功能：停止队列管理器

应用举例：stopqm

图3-8-3 stopqm


3.8.4 启动队列管理器 - KCXP操作手册

3.8.4 启动队列管理器

命令名： startqm

命令功能：启动队列管理器

应用举例：startqm

图3-8-4 startqm


3.9 操作员 - KCXP操作手册

3.9 操作员


3.9.1 显示操作员信息 - KCXP操作手册

3.9.1 显示操作员信息

命令名： dispoper

命令功能：显示用于登录XPCC的操作员的信息

命令描述：dispoper -<n>|<a>

-n 后跟操作员名字

-a 无参数，显示全部操作员

应用举例：dispoper -n system

dispoper -a

图3-9-1 dispoper


3.9.2 添加操作员 - KCXP操作手册

3.9.2 添加操作员

命令名： addoper

命名功能：增加可以用于XPCC登录的操作员

命令描述：addoper -<n> -<l> -<p>

-n 操作员名字

-l 操作员运行级别（0~4）

-p 操作员密码

应用举例：addoper -n test -l 1 -p abc

添加该操作员后，就可以使用test操作员及其密码abc登录XPCC了

图3-9-2 addoper


3.9.3 修改操作员信息 - KCXP操作手册

3.9.3 修改操作员信息

命令名： modoper

命令功能：根据操作员名字，修改该操作员的密码或运行级别

命令描述：modoper -<n> -[p] -[l]

-n 操作员名字

-l 操作员运行级别（0~4）

-p 操作员密码

应用举例：modoper -n system -p ok

如此修改操作员之后，使用system操作员登录XPCC输入密码时需要输入新密码ok

图3-9-3 modoper


3.9.4 删除操作员信息 - KCXP操作手册

3.9.4 删除操作员信息

命令名： deloper

命令功能：根据操作员的名字删除操作员

命令描述：deloper –<n>

-n 操作员名字

应用举例：deloper -n test

删除该操作员后，就不能使用test操作员登录XPCC了

图3-9-4 deloper


3.10 用户 - KCXP操作手册

3.10 用户


3.10.1 查看用户信息 - KCXP操作手册

3.10.1 查看用户信息

命令名： dispuser

命令功能：查看用户信息

命令描述：dispuser -<n>|<a>

-n 用户名

-a 全部

应用举例：dispuser -n KCXP00

dispuser -a

图3-10-1 dispuser


3.10.2 添加用户信息 - KCXP操作手册

3.10.2 添加用户信息

命令名： adduser

命令功能：增加用户信息

命令描述：adduser -<n> -<p> -<r>

-n 用户名

-m 用户密码

-r 用户级别（在kcxp_v8.8以下版本、kcxp_v10.11以下版本中，该值为0至4，并且没有实际意义；其他版本中，该值1表示新增用户用于客户端连接，2表示用于路由连接，4表示用于内挂插件，8表示用于加解密压缩，该4个值可以自由相加表示有相应的权限，比如11=1+2+8,15=1+2+4+8）

应用举例：adduser -n test -p testtest -r 5

添加该用户后，就可以用test用户用于客户端连接和内挂插件使用了

图3-10-2 adduser


3.10.3 修改用户信息 - KCXP操作手册

3.10.3 修改用户信息

命令名： moduser

命令功能：根据用户的名字，修改用户的密码或级别

命令描述：moduser -<n> -[p] -[r]

应用举例：moduser -n test -r 6

如果修改用户后，test用户的权限就变成了mca（路由接入）+exit（内挂插件）了

图3-10-3 moduser


3.10.4 删除用户信息 - KCXP操作手册

3.10.4 删除用户信息

命名名： deluser

命令功能：根据用户的名字删除用户

命令描述：deluser -<n>

-n 用户名

应用举例：deluser -n test

图3-10-4 deluser


3.11 队列 - KCXP操作手册

3.11 队列


3.11.1 显示所有队列的统计信息 - KCXP操作手册

3.11.1 显示所有队列的统计信息

命令名： dispqa

命令描述：显示系统中所有队列的种类统计信息

应用举例：dispqa

图3-11-1 dispqa


3.11.2 显示队列信息 - KCXP操作手册

3.11.2 显示队列信息

命令名： dispqd

命令功能：显示队列的属性信息

命令描述：dispqd -<a>|<i>|<n>

-i 指定队列的索引

-n 指定队列的名字

-a 显示所有队列的索引、类型、名称

应用举例：dispqd -a

dispqd -i 0

dispqd -n req

图3-11-2 dispqd


3.11.3 显示队列中的消息 - KCXP操作手册

3.11.3 显示队列中的消息

命令名： dispqu

命令功能：显示队列中消息的属性及内容

命令描述：dispqu -<i|n> -<p|a>

-i 指定队列的索引

-n 指定队列的名字

-p 指定显示该队列的第几条信息

-a 显示该队列的全部信息

应用举例：dispqu -n req -a

dispqu -n req -p 2

dispqu -i 0 -p 1

图3-11-3 dispqu


3.11.4 创建队列 - KCXP操作手册

3.11.4 创建队列

命令名： createq

命令功能：根据输入的参数建立一个队列

命令描述：createq -<n> -<d> -<t> -<p>

-n 队列名称

-d 队列描述

-t 队列类型，t的取值范围：

A：本地应用队列

P：可靠队列

T：传输队列

I：启动队列

D：死信队列

C：命令队列

R：命令结果队列

L：日志队列

M：监控队列

E：事件队列

-p 创建队列模式，p的取值范围：

1：缺省：可读可写共享

2：可读

4：可写

6：可读可写

8：共享

A：可写共享

C：可读共享

E：可读可写共享

应用举例：createq -n test -d "it is a test queue" -t A -p 1

图3-11-4 createq


3.11.5 删除队列 - KCXP操作手册

3.11.5 删除队列

命令名： deleteq

命令功能：删除一个队列，清空里面的消息

命令描述：deleteq -<i>|<n>

-i 指定队列的索引

-n 指定队列的名字

应用举例：deleteq -i 3

deleteq -n test

图3-11-5 deleteq


3.11.6 清空队列 - KCXP操作手册

3.11.6 清空队列

命令名： emptyq

命令功能：清空一个队列里的消息

命令描述：emptyq -<i>|<n>

-i 指定队列的索引

-n 指定队列的名字

应用举例：emptyq -i 2

emptyq -n req

图3-11-6 emptyq


3.11.7 设置队列属性 - KCXP操作手册

3.11.7 设置队列属性

命令名： setqattr

命令功能：设置队列的属性

命令描述：setqattr -<i>|<n> -[C] -[R] -[W] -[F] -[P] -[H] -[V] -[S] -[D] -[T] -[t] -[G] -[Y] -[N] -[O] -[E] -[I] -[L] -[A] -[K] -[X]

-i 指定队列的索引

-n 指定队列的名字

-C 队列描述

-R 读权限（1可读，0不可读）

-W 写权限（1可写，0不可写）

-F 优先级（0~19）

-P 可靠性（1可靠，0不可靠）

-H 队列的最大深度（当队列堆积的消息数达到该值时，客户端再往该队列放消息时无法成功并报4003的错。该值缺省为10000）

-V 队列的有效深度（队列有效深度不能大于队列最大深度，否则会出现错误提示。当队列堆积的消息数达到该值时，客户端再往该队列放消息时会报4004的告警。该值缺省为8000）

-S 共享性（3共享，0不共享）

-D 消息传输策略（0先进先出，1优先级）

-T 触发开关（1打开，0关闭）

-t 触发类型（0无，1第一条触发，2每条触发，3到达触发深度触发）

-G 触发深度（该值不能大于队列最大深度，否则会出现错误提示）

-Y 触发消息优先级（0~19）

-N 启动队列索引

-O 启动进程名

-E 最大深度事件开关（1打开，0关闭）

-I 深度上限事件开关（1打开，0关闭）

-L 深度上限（该值不能大于队列最大深度，否则会出现错误提示。在深度上限开关打开的情况下，该队列的深度达到该深度上限值后，再往里面放消息就会自动删除其中的过期消息）

-A 窗口活动的开始时间

-K 窗口活动的间隔时间

-Z 队列中消息是否按message id索引（1是，0否）

-X 队列中消息是否按correl id索引（1是，0否）

应用举例：setqattr -n req -H 100000 -V 100000

setqattr -i 2 -I 1 -L 100

图3-11-7 setqattr


3.11.8 删除消息 - KCXP操作手册

3.11.8 删除消息

命令名： removeqmsg

适用版本：目前仅在windows的kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才能使用

命令功能：删除队列中的某些或某个消息

命令描述：removeqmsg -<i|n> -<p|o|l>

-i 指定队列的索引

-n 指定队列的名字

-p 指定删除第几条

-o 删除该队列的过期消息。后面不需跟参数

-l 指定删除在队列中存在时间超过该值的消息。单位：秒

应用举例：removeqmsg -n req -o

removeqmsg -i 4 -p 2

removeqmsg -n ans -l 30

图3-11-8 removeqmsg


3.11.9 自动删除消息 - KCXP操作手册

3.11.9 自动删除消息

命令名： setexisttime

适用版本：目前仅在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才能使用

命令功能：当某队列深度超过指定值后，自动删除该队列中存在时间超过指定值的消息

命令描述：setexisttime -<n> -<d> -<t>

-n 队列名称

-d 指定队列深度

-t 指定消息存在时间。单位：秒

应用举例：setexisttime -n ans3 -d 20 -t 90

如此设置后，当ans3队列的深度达到20后，就会自动删除其中存在时间超过90秒的消息。

图3-11-9 setexisttime


3.11.10 撤销“自动删除消息” - KCXP操作手册

3.11.10 撤销“自动删除消息”

命令名： delexisttime

适用版本：目前仅在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才能使用

命令功能：取消队列关于自动删除消息的设置

命令描述：delexisttime -<a>|<n>

-n 指定队列名

-a 取消所有队列的自动删除消息的设置

应用举例：delexisttime -n ans3

delexisttime -a

图3-11-10 delexisttime


3.11.11 显示“自动删除消息”的设置 - KCXP操作手册

3.11.11 显示“自动删除消息”的设置

命令名： dispexisttime

适用版本：目前仅在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中才能使用

命令功能：显示KCXP中关于“自动删除消息”的设置

命令描述：dispexisttime -<a>|<n>

-n 指定队列名称

-a 显示全部

应用举例：dispexisttime -a

图3-11-11 dispexisttime


3.12 路由 - KCXP操作手册

3.12 路由


3.12.1 显示路由信息 - KCXP操作手册

3.12.1 显示路由信息

命令名： disproute

命令功能：查看所有路由信息，或按索引查看路由信息

应用举例：disproute

disproute –i 0

图3-12-1 disproute


3.12.2 添加路由信息 - KCXP操作手册

3.12.2 添加路由信息

命令名： addroute

命令功能：在两台KCXP之间添加路由

命令描述：addroute -<n> -<m> -<p> -<a> -<o> -<t> -<u> -<w> -<d> -<c> -<r>

-n 对方KCXP的节点编号

-m 对方KCXP的队列管理器名

-p 协议类型

1：TCP

2：UDP

3：SPX

4：IPX

5：SNA

-a 对方KCXP用于监听路由接入的IP地址

-o 对方KCXP用于监听路由接入的端口

-t 类型

1：UIS

0：MCA

-u 用户名

-w 密码

-d 是否缺省（1缺省，0非缺省）

-c 连接数

-r 连接方向

1：本节点做服务端

0：本节点做客户端

应用举例：

KCXP1的信息：ip地址192.168.1.1，节点编号00000001，队列管理器名a1，做服务端
KCXP2的信息：ip地址192.168.1.2，节点编号00000002，队列管理器名a2，做客户端
在KCXP1：addroute -n 00000002 -m a2 -p 1 -a 192.168.1.2 -o 20000 -t 0 -u KCXP00 -w 888888 -d 1 -c 1 -r 1
在KCXP2：addroute -n 00000001 -m a1 -p 1 -a 192.168.1.1 -o 20000 -t 0 -u KCXP00 -w 888888 -d 1 -c 1 -r 0

图3-12-2 addroute


3.12.3 探测路由 - KCXP操作手册

3.12.3 探测路由

命令名： checkroute

命令功能：根据对方节点编号，探测本节点与它是否路由相通

命令描述：checkroute -<n>

-n 对方KCXP的节点编号

应用举例：checkroute -n 00000002

图3-12-3 checkroute


3.12.4 修改路由信息 - KCXP操作手册

3.12.4 修改路由信息

命令名： modroute

命令功能：根据路由的索引，修改该条路由信息

命令描述：modroute -<i> -[n] -[m] -[p] -[a] -[o] -[t] -[u] -[w] -[d] -[c] -[r]

-i 路由的索引。通过disproute命令可以查看到每条路由的索引号

-n 对方KCXP的节点编号

-m 对方KCXP的队列管理器名

-p 协议类型

1：TCP

2：UDP

3：SPX

4：IPX

5：SNA

-a 对方KCXP用于监听路由接入的IP地址

-o 对方KCXP用于监听路由接入的端口

-t 类型

1：UIS

0：MCA

-u 用户名

-w 密码

-d 是否缺省（1缺省，0非缺省）

-c 连接数

-r 连接方向

1：本节点做服务端

0：本节点做客户端

应用举例：modroute -i 5 -m rzrq001 -a 192.168.10.2

图3-12-4 modroute


3.12.5 删除路由信息 - KCXP操作手册

3.12.5 删除路由信息

命令名： delroute

命令功能：根据路由的索引，删除该条路由。删除某条路由时，建议先在该条路由的客户端删除，再到服务端删除。

命令描述：delroute -<i>

-i 路由的索引。通过disproute命令可以查看到每条路由的索引号

应用举例：delroute -i 1

图3-12-5 delroute


3.13 远程队列 - KCXP操作手册

3.13 远程队列

远程队列，也叫远程定义、远程映射。在KCXP中建通了路由之后，我们还可以在KCXP中建立远程队列，用于指向远程KCXP（路由KCXP）的某个队列。那么，客户端将消息放入远程队列，也就等于把消息放入了该远程队列所指向的远程KCXP的队列。


3.13.1 显示远程队列 - KCXP操作手册

3.13.1 显示远程队列

命令名： disprdef

命令功能：显示远程队列

命令描述：dispremdef -<a>|<n>

-n 远程队列名字

-a 无参数，显示全部

应用举例：disprdef -a

disprdef –n test

disprdef –n a

图3-13-1 disprdef


3.13.2 添加远程队列 - KCXP操作手册

3.13.2 添加远程队列

命令名： addrdef

命令功能：添加远程队列

命令描述：addrdef -<n> -<h>|-<c> -<d> -<s>

-n 远程队列的名字

-c 远程KCXP的节点编号

-d 远程KCXP的队列

-s 状态

0：Active

1：Disable

应用举例：addrdef -n req_test -c 00001256 -d req -s 0

图3-13-2 addrdef


3.13.3 修改远程队列 - KCXP操作手册

3.13.3 修改远程队列

命令名： modrdef

命令功能：根据远程定义的名字，修改远程定义的信息

命令描述：moderemdef -<n> -[h] -[c] -[d] -[s]

-n 远程队列的名字

-c 远程KCXP的节点编号

-d 远程KCXP的队列

-s 状态

0：Active

1：Disable

应用举例：modrdef -n req_test -d req1

图3-11-3 modrdef


3.13.4 删除远程队列 - KCXP操作手册

3.13.4 删除远程队列

命令名： delrdef

命令功能：根据远程定义的名字，删除远程定义

命令描述：delrdef -<n>

-n 远程定义的名字

应用举例：delrdef -n req_test

delrdef –n abc

图3-13-4 delrdef


3.14 内置插件 - KCXP操作手册

3.14 内置插件


3.14.1 显示内置插件 - KCXP操作手册

3.14.1 显示内置插件

命令名： dispexit

命令功能：显示所有内置插件

命令描述：dispexit <-a>

-a 显示所有内置插件

应用举例：dispexit -a

图3-14-1 dispexit


3.14.2 添加内置插件 - KCXP操作手册

3.14.2 添加内置插件

命令名：addexit

命令功能：添加一个内置插件

命令描述：addexit <-f> [-c] [-a]

-f 内置插件名称

-c 插件描述

-a 属性（0、1、2）。填0就好了，不填也可以

应用举例：addexit -f transmit.dll

图3-14-2 addexit


3.14.3 删除内置插件 - KCXP操作手册

3.14.3 删除内置插件

命令名： delexit

命令功能：根据内置插件的索引，删除该插件；若该插件的State为1（使用状态），则将该插件的State改为0（关闭状态）。即：对于State为1的内置插件，需调用delexit两次，才会将该插件删掉。

命令描述：delexit <-i>

-i 内置插件的索引。通过dispexit命令可以查看到每个内置插件的索引号

应用举例：delexit -i 1

图3-14-3 delexit


3.14.4 修改内置插件 - KCXP操作手册

3.14.4 修改内置插件

命令名： modexit

命令功能：根据内置插件的索引，修改该内置插件的名字、描述、状态和属性

命令描述：modexit <-i> [-f] [-c] [-s] [-a]

-i 内置插件的索引。通过dispexit命令可以查看到每个内置插件的索引号

-f 内置插件名称

-s 内置插件的状态（1打开，0关闭）

-a 内置插件的属性（0、1、2）

应用举例：modexit -i 1 -s 1

图3-14-4 modexit


3.15 日志配置 - KCXP操作手册

3.15 日志配置

在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中，用户还可以通过XPCC来进行日志的配置。在kcxp_v10.20(8.20)及更高的版本中，用户不能通过XPCC来进行日志的配置（只能通过界面配置）。


3.15.1 显示日志配置 - KCXP操作手册

3.15.1 显示日志配置

命令名： displogconf

命令功能：显示KCXP当前的日志配置

应用举例：displogconf

图3-15-1 displogconf


3.15.2 设置日志 - KCXP操作手册

3.15.2 设置日志

命令名： setlogconf

命令功能：设置日志的基本属性，以及打开、关闭各种类型的日志

命令描述：setlogconf -[d] -[s] -[p] -[o] -[q] -[l] -[m] -[c] -[a] -[u] -[b] -[w] -[g]

-d：日志路径

-s：日志文件的大小（单位：字节）

-p：日志文件名的格式

0：日志文件名的格式是type.log （每种type日志写在一个日志文件中）

1：日志文件名的格式是type_level.log （每种type日志按不同的level分成不同的日志文件）

-o：每条日志的title包含项

i：日志title含KCXP的IP（若之前已含，那么再设置一次就表示不含）

r：日志title含KCXP的进程名（若之前已含，那么再设置一次就表示不含）

p：日志title含KCXP的进程id（若之前已含，那么再设置一次就表示不含）

t：日志title含写该条日志的线程id（若之前已含，那么再设置一次就表示不含）

e：日志title含写该条日志时传入的事件（若之前已含，那么再设置一次就表示不含）

-q：队列日志的开关（1打开，0关闭）。队列日志开关打开之后，还需要对队列日志进一步设置

-l：死信日志的开关（1打开，0关闭）

-m：消息日志的开关（1打开，0关闭）。消息日志开关打开之后，还需要对消息日志进一步设置

-c：集群日志的开关（1打开，0关闭）

-a：MCA日志的开关（1打开，0关闭）

-u：UIS日志的开关（1打开，0关闭）。UIS日志开关打开之后，还需要对UIS日志进一步设置

-b：调试日志的开关（1打开，0关闭）

-w：写文件方式（0线性日志，1循环日志）

-g：同类型文件个数，1~1024

应用举例：setlogconf -s 10240 -o t -a 1

setlogconf -q 1

图3-15-2 setlogconf


3.15.3 显示队列日志的配置 - KCXP操作手册

3.15.3 显示队列日志的配置

命令名： displogqc

命令功能：显示当前有关队列日志的配置：打开了哪些队列的日志

命令描述：displogqc -<a>|<n>

-n 按队列名称显示该队列的日志配置

-a 无需参数，显示全部的队列日志配置（若没有，显示no items，或No enough parameter）

应用举例：displogqc -a

图3-15-3 displogqc


3.15.4 增加队列日志 - KCXP操作手册

3.15.4 增加队列日志

命令名： addlogqc

命令功能：增加某个队列的日志记录。如果已经增加了该队列的日志，再使用addlogqc命令后，则该队列的日志记录将按此次的设置。只有在队列日志开关打开的情况下，该设置才有意义。

命令描述：addlogqc -<n> -[m] -[s]

-n 要记录哪个队列的日志

-m 要记录该队列什么模式的日志

1：记录进入该队列的消息的日志

2：记录从该队列取出的消息的日志

3：进、出该队列的消息都要记录

-s 该队列日志的状态（1打开，0关闭）

应用举例：addlogqc -n req -m 1 -s 1

在队列日志开关打开的情况下，这样设置后，所有进入req队列的消息都会在日志中记录下来。

图3-15-4 addlogqc


3.15.5 修改队列日志 - KCXP操作手册

3.15.5 修改队列日志

命令名： setlogqc

命令功能：对于已经增加了日志设置的队列，根据队列名，修改该队列的日志设置。

命令描述：setlogqc -<n> -[m] -[s]

-n 队列名

-m 模式

1：记录进入该队列的消息的日志

2：记录从该队列取出的消息的日志

3：进、出该队列的消息都要记录

-s 该队列日志的状态（1打开，0关闭）

应用举例：setlogqc -n req -m 3

图3-15-5 setlogqc


3.15.6 删除队列日志 - KCXP操作手册

3.15.6 删除队列日志

命令名： dellogqc

命令功能：根据队列名，删除该队列的日志设置

命令描述：dellogqc -<n>

-n 队列名

应用举例：dellogqc -n req

图3-15-6 dellogqc


3.15.7 显示消息日志的配置 - KCXP操作手册

3.15.7 显示消息日志的配置

命令名： displogmc

命令功能：显示当前有关消息日志的配置：打开了哪些消息的日志

命令描述：displogmc -<a>|<i>

-i 显示第几条消息日志的配置

-a 无需参数，显示全部消息日志配置（若没有，显示no items，或No enough parameter）

应用举例：displogmc -a

图3-15-7 displogmc


3.15.8 增加消息日志 - KCXP操作手册

3.15.8 增加消息日志

命令名： addlogmc

命令功能：增加消息的日志记录。只有在消息日志开关打开的情况下，该设置才有意义。

命令描述：addlogmc -[a] -[o] -[d] -[q] -[m] -[s]

-a 放入该消息的客户端ip（*表示通配）

-o 消息的源节点编号（*表示通配）

-d 消息的目标节点编号（*表示通配）

-q 消息的目标队列（*表示通配）

-m 消息的模式

1：进入KCXP

2：从KCXP出

3：进+出

-s 该消息日志的状态（1打开，0关闭）

应用举例：addlogmc -a 192.168.1.1 -o * -d 10000088 -q * -m 1 -s 1

在消息日志开关打开的情况下，这样设置后，所有进入到该KCXP的客户端ip为192.168.1.1并且目标节点为10000088的消息都会在日志中记录下来。

addlogmc -a * -o 00000001 -d *-q ans -m 2 -s 1

在消息日志开关打开的情况下，这样设置后，所有从该KCXP出去的源节点为00000001并且目标队列为ans的消息都会在日志中记录下来。

图3-15-8 addlogmc


3.15.9 修改消息日志 - KCXP操作手册

3.15.9 修改消息日志

命令名： setlogmc

命令功能：根据消息日志的索引，修改消息日志设置。

命令描述：setlogmc -<i> [a] -[o] -[d] -[q] -[m] -[s]

-i 消息日志的索引。通过displogmc获得

-a 放入该消息的客户端ip（*表示通配）

-o 消息的源节点编号（*表示通配）

-d 消息的目标节点编号（*表示通配）

-q 消息的目标队列（*表示通配）

-m 消息的模式

1：进入KCXP

2：从KCXP出

3：进+出

-s 该消息日志的状态（1打开，0关闭）

应用举例：setlogmc i 0 -m 3

图3-15-9 setlogmc


3.15.10 删除消息日志 - KCXP操作手册

3.15.10 删除消息日志

命令名： dellogmc

命令功能：根据消息日志的索引，删除消息日志

命令描述：dellogmc -<i>

-i消息日志的索引。通过displogmc获得

应用举例：dellogmc -i 0

图3-15-10 dellogmc


3.15.11 显示客户端日志的配置 - KCXP操作手册

3.15.11 显示客户端日志的配置

命令名： disploguis

命令功能：显示当前的有关客户端消息日志的配置

命令描述：disploguis -<a>|<i>

-a 无需配置，显示所有的客户端日志（若没有，显示no items）

-i 索引号，显示第几条客户端日志的配置，可以通过disploguis -a 查看全部客户端日志的索引号

应用举例：disploguis -a

图3-15-11 disploguis


3.15.12 增加客户端日志 - KCXP操作手册

3.15.12 增加客户端日志

命令名： addloguis

命令功能：增加客户端日志的记录。只有在客户端日志开关打开的情况下，该设置才有意义。

命令描述：addloguis -<a> -[c] -[m] -[s]

-a 接入此KCXP的客户端IP地址，通配为*

-c 客户端应用程序，通配为*

-m 客户端放入/取走消息模式

1：客户端往此KCXP放入的消息

2：客户端从此KCXP取的走消息

3：客户端放入/取走消息都要记录

-s 该客户端日志的状态（1打开，0关闭）

应用举例：addloguis -a 192.168.204.7 -c MATLAB.exe -m 2 -s 1

在客户端日志打开的情况下，这样设置后，客户端IP为192.168.204.7，且应用程序为MATLAB.exe从KCXP取走的消息全部记录到日志文件里。

图 3-15-12 addloguis


3.15.13 修改客户端日志 - KCXP操作手册

3.15.13 修改客户端日志

命令名： setloguis

命令功能：根据客户端日志索引，修改客户端日志。只有在客户端日志开关打开的情况下，该设置才有意义。

命令描述：setloguis -<i> -[a] -[c] -[m] -[s]

-i 索引号，可以根据disploguis -a 查看所有日志的索引号

-a 接入此KCXP的客户端IP地址，通配为*

-c 客户端应用程序，通配为*

-m 客户端放入/取走消息模式

1：客户端往此KCXP放入的消息

2：客户端从此KCXP取走的消息

3：客户端放入/取走消息都要记录

-s 该客户端日志的状态（1打开，0关闭）

应用举例：setloguis -i 4 -a 192.168.204.8 -c MATLAB.exe -m 3 -s 0

图3-15-12 setloguis


3.15.14 删除客户端日志 - KCXP操作手册

3.15.14 删除客户端日志

命令名： delloguis

命令功能：根据客户端日志的索引，删除客户端日志

命令描述：delloguis -<i>

-i客户端日志的索引。通过disploguis -a查看

应用举例：delloguis -i 4

图 3-15-14 delloguis


3.15.15 显示路由（通道代理）日志的配置 - KCXP操作手册

3.15.15 显示路由（通道代理）日志的配置

命令名： displogmca

命令功能：显示当前路由日志的配置

命令描述：displogmca -<a>|<i>

-a 无需配置，显示所有的代理通道日志（若没有，显示no items）

-i 索引号，显示第几条通道代理日志的配置，可以通过displogmca -a查看全部通道代理日志的索引号

应用举例：displogmca -a

图 3-15-15 displogmca


3.15.16 增加路由（通道代理）日志 - KCXP操作手册

3.15.16 增加路由（通道代理）日志

命令名： addlogmca

命令功能：增加路由日志的记录。只有在路由日志开关打开的情况下，该设置才有意义。

命令描述：addlogmca -<a> -[m] -[s]

-a 路由KCXP的节点编号

-m 路由KCXP往本KCXP放入/取走消息模式

1：路由KCXP往本KCXP放入的消息

2：路由KCXP从本KCXP取走的消息

3：路由KCXP往本KCXP放入/取走消息都要记录

-s 该路由日志的状态（1打开，0关闭）

应用举例：addlogmca -a 10000018 -m 1 -s 1

在通道代理日志打开的情况下，这样设置后，由10000018节点放入此KCXP的消息都会记录到日志文件里。

图 3-15-16 addlogmca


3.15.17 修改路由（通道代理）日志 - KCXP操作手册

3.15.17 修改路由（通道代理）日志

命令名： setlogmca

命令功能：根据路由日志索引，修改路由日志 。

命令描述：setlogmca -<i> -[a] -[m] -[s]

-i 索引号，可以根据setlogmca -a 查看所有日志索引号

-a 路由KCXP的节点编号

-m 路由KCXP往本KCXP放入/取走消息模式

1：路由KCXP往本KCXP放入的消息

2：路由KCXP从本KCXP取走的消息

3：路由KCXP往本KCXP放入/取走消息都要记录

-s 该路由日志的状态（1打开，0关闭）

应用举例：setlogmca -i 2 -m 3

图 3-15-17 setlogmca


3.15.18 删除路由（通道代理）日志 - KCXP操作手册

3.15.18 删除路由（通道代理）日志

命令名： dellogmca

命令功能：根据路由日志的索引，删除路由日志

命令描述：dellogmca -<i>

-i路由日志的索引。通过displogmca -a查看

应用举例：dellogmca -i 2

图 3-15-18 dellogmca


3.16 路由路径 - KCXP操作手册

3.16 路由路径

该功能适用于kcxp_v10.20(8.20)及更高的版本。

对不低于kcxp_v10.15(8.15) build20150623但低于kcxp_v10.20(8.20)的版本，若请求要去达三级以上的XP，需要在每个中途XP上配置转发，将请求消息转到目标XP，对于kcxp_v10.15(8.15) build20150623以下的版本，还需在目标XP和源XP建路由，应答才能回到源XP。

但是，在kcxp_v10.20(8.20)及更高的版本中，用户可以在源XP通过XPCC命令设置路由路径，指明可以经由哪些XP到达哪个目标XP，那么在源XP的远程队列可以指向路由路径上的任意一个XP，转发规则可以转到路由路径上的任意一个XP。

对路由路径的操作都是实时存盘，不需要使用另外sync命令。


3.16.1 增加路由路径 - KCXP操作手册

3.16.1 增加路由路径

命令名： addroutepath

命令功能：建立一条路由路径，说明可以从哪个xp到哪个xp，再到哪个xp，再到哪个xp，……，前提是相邻的xp路由要是通的

命令描述：addroutepath -<p>

-p 该条路由路径经由哪些xp（节点编号），至少两个，中间用英文逗号隔开，第一个需为本xp的路由xp

应用举例：addroutepath -p 11000002,14105000,12000104

图 3-16-1 addroutepath


3.16.2 显示路由路径 - KCXP操作手册

3.16.2 显示路由路径

命令名： disproutepath

命令功能：显示所有路由路径，或根据路由路径的索引显示路由路径

命令描述：disproutepath -<a>|<i>

-a 显示所有路由路径

-i 要显示的路由路径的索引。可以通过disproutepath –a查看所有路由路径的索引号

应用举例：disproutepath –a

图 3-16-2 disproutepath


3.16.3 删除路由路径 - KCXP操作手册

3.16.3 删除路由路径

命令名： delroutepath

命令功能：删除所有路由路径，或根据路由路径的索引删除路由路径

命令描述：delroutepath -<a>|<i>

-a 删除所有路由路径

-i 要删除的路由路径的索引。通过disproutepath –a查看

应用举例：delroutepath –i 0

图 3-16-3 delroutepath


3.16.4 修改路由路径 - KCXP操作手册

3.16.4 修改路由路径

命令名： modroutepath

命令功能：根据路由路径的索引，修改路由路径

命令描述：modroutepath -<i> -<p>

-i 要修改的路由路径的索引。通过disproutepath –a查看

-p 将该条路由路径改成经由哪些xp（节点编号），至少两个，中间用英文逗号隔开，第一个需为本xp的路由xp

应用举例：modroutepath –i 0 -p 11000002,14105000,14144000

图 3-16-4 modroutepath


3.17 存盘 - KCXP操作手册

3.17 存盘

使用XPCC的命令对KCXP做的各种操作，在该次KCXP运行过程中一直都是生效的，但是重启KCXP后，这些设置都将失效。要让XPCC的各种操作在KCXP重启后仍然生效，需要使用XPCC的存盘命令。

注：有关操作员oper和路由路径routepath的各种操作，均是实时存盘的。

命令名： sync

命令功能：对XPCC的操作进行存盘，使得这些操作在KCXP重启后仍然生效。

命令描述：sync -<a>|<n>

-a 全部存盘

-n 按内容存盘

APPQ：应用队列

EVENT：事件信息

EXISTTIME：消息存在时间

EXIT：内置插件

LOG：日志

MQM：队列管理器

NODE：节点

OPER：操作员

RDEF：远程队列

ROUTE：路由

USER：用户

应用举例：sync -a

sync -n ROUTE

图3-17-1 sync


第四部分 功能模块介绍 - KCXP操作手册

第四部分 功能模块介绍


4.1 KCXP配置介绍 - KCXP操作手册

4.1 KCXP配置介绍

kcxp.ini是KCXP主程序的配置文件，放于KCXP的运行目录下，其内容如下：

对于windows版的KCXP，还可以点击KCXP界面的“手工配置”按钮，在弹出的对话框中点击“下一页”开始KCXP的配置

图4-1-1 从界面进入KCXP配置页

若直接修改kcxp.ini，kcxp.ini最后必须以一个空行结束，否则最后一个字符会被清掉。在界面的“手工配置”修改kcxp配置或直接修改kcxp.ini文件，均需要重启KCXP才能生效！


4.1.1 “节点”属性页（[Node]配置项） - KCXP操作手册

4.1.1 “节点”属性页（[Node]配置项）

4-1-2 “节点”属性页

“节点”对应kcxp.ini中的[Node]项，其属性页各配置项与kcxp.ini配置项对照表：

界面名称 | kcxp.ini配置项名称 | 说明
节点描述 | Descript | 对该KCXP的描述。少于64个字符。
节点名称 | NodeName | 节点名称，在系统内唯一。点击kcxp界面的自动配置后，该值为机器的名称。不超过20个字符。
节点编号 | NodeCode | 节点编号，在系统内唯一。8个字节。
队列管理器名 | QMgrName | 配置成与节点名称一样。
第一地址、第二地址…… | NetAddr1、NetAddr2…… | 该KCXP用于路由xp连接和客户端连接的ip和端口，格式为：TCP,ip,端口,MCA(或者UIS) MCA表示该NetAddr配置的ip和端口是用于路由xp的接入；UIS表示该NetAddr配置的ip和端口是用于客户端程序的接入 点击kcxp界面的自动配置后，此处会自动获取机器的所有ip，对每个ip会自动配置20000端口用于路由xp连接、21000端口用于客户端连接 界面最多配置5个地址，超过部分需到kcxp.ini配置，最多也只能配10个NetAddr


4.1.2 “用户服务器”属性页（[UserServer]配置项） - KCXP操作手册

4.1.2 “用户服务器”属性页（[UserServer]配置项）

图4-1-3 kcxp_v10.20(8.20)以下版本的“用户服务器”属性页

图4-1-4 kcxp_v10.20(8.20)及以上版本的“用户服务器”属性页

“用户服务器”对应kcxp.ini中的[UserServer]项，其属性页各配置项与kcxp.ini配置项对照表：

界面名称

kcxp.ini配置项名称

说明

请求处理线程数

DefConnThreadNum

处理api请求的线程数。

配成机器cpu核数的一倍或两倍。

点击kcxp界面的自动配置后，该值为机器cpu核数的2倍（从6.20.20161221开始的kcxpmanager，点自动配置该值为机器cpu核数的1倍）。

Get请求处理线程数

DefPoolThreadNum

处理api get请求的线程数。

配成机器cpu核数的倍数。

点击kcxp界面的自动配置后，该值为机器cpu核数的4倍（从6.20.20161221开始的kcxpmanager，点自动配置该值为机器cpu核数的2倍）。

Group1、Group2……

Group1、Group2……

在kcxp_v10.20(8.20) 及以上版本才有。表示按照队列来分配get请求的线程。

当某个kcxp的kcbp连接和客户端连接都非常多，请求队列有大量堆积而kcbp又不忙的情况下建议使用。

界面配置方法：“处理线程数”填写分配多少个线程专门用来处理第三列“队列”的get请求。“队列”里可以写多个队列，用逗号隔开。最多配8个Group，所有Group中的“处理线程数”加起来不能超过“Get请求处理线程数”-2

kcxp.ini配置方法：在kcxp.ini的[UserServer]下，配置Group1=线程数:队列1,队列2,……。最多配8个Group，并且这些线程数总和不能超过DefPoolThreadNum的值-2

CPUAff

在kcxp_v10.20(8.20) 及以上版本才有。配置这些线程是否使用cpu亲和性，1表示使用，0表示不使用。缺省为0


4.1.3 “集群与负载”属性页（[Cluster]配置项） - KCXP操作手册

4.1.3 “集群与负载”属性页（[Cluster]配置项）

图4-1-5 “集群与负载”属性页

“集群与负载”对应kcxp.ini中的[Cluster]项，其属性页各配置项与kcxp.ini配置项对照表：

界面名称 | kcxp.ini配置项名称 | 说明
CPU(%) | CPU | xp计算负载值时，这四项各自占的比重。这四个值加起来为100 CPU配100，其他配0，表示本xp的负载值全以机器cpu使用率的多少来计算。 连接数配100，其他配0，表示本xp的负载值全以客户端的在线连接数多少来计算。该值仅在10.15(8.15)及以上的版本中会生效。
内存(%) | MEM
虚拟内存(%) | SWAP
连接数(%) | CONN
集群ID | ClusterID | xp的集群id，共5位字符，前4位表示该xp所在集群的集群号，第5位为该xp在该集群中的顺序号（0,1,…,9,A,…,F） 不同集群的xp的集群ID前4位不要一样！ 同一集群内每个xp的集群ID第5位不要一样！ 00000表示不使用集群。
负载监听协议 | LocalLoadAddr | 选TCP
负载监听地址 |  | 本xp使用哪个ip用来监听集群xp的接入
负载监听端口 |  | 本xp使用哪个端口用来监听集群xp的接入
负载阀值(差值) | LBValue | 当集群内有xp的负载值比本xp的负载值小的差值，比此处配的值要大，就说明本xp很忙。 建议配成100。否则本xp很容易觉得自己很忙，会报很多too busy的错误。 在10.20(8.20)及以上版本中，去掉了该项配置。
Cluster1地址、Cluster2地址…… | Cluster1、Cluster2…… | 集群内其他xp的信息，格式为：对方xp的ip,对方xp的端口,TCP,对方xp的节点编号 界面最多配置3个Cluster，超过部分需到kcxp.ini配置，最多也只能配15个。


4.1.4 “内置插件”属性页（[Exit]配置项） - KCXP操作手册

4.1.4 “内置插件”属性页（[Exit]配置项）

图4-1-6 “内置插件”属性页

“内置插件”对应kcxp.ini中的[Exit]项。

界面配置：在“地址项”下拉框中选择NetAddr，然后再到“插件名称”的框中手动输入要在该NetAddr下使用哪些插件（一个NetAddr下最多配置10个插件，多个插件用逗号隔开）

kcxp.ini中配置：直接在[Exit]项下写：NetAddr几=哪些插件（一个NetAddr下最多配置10个插件，多个插件用逗号隔开）

此处每个NetAddr是干什么用的，参看4.1.1章节“节点”中的各个地址。


4.1.5 “Nagle”属性页（[Nagle]配置项） - KCXP操作手册

4.1.5 “Nagle”属性页（[Nagle]配置项）

图4-1-7 “Nagle”属性页

“Nagle”对应kcxp.ini中的[Nagle]项。

界面配置：在“地址项”下拉框中选择NetAddr，然后再勾选或不勾选旁边的 [image] 。勾选表示该NetAddr 通讯使用Nagle算法，不勾选表示该NetAddr 通讯不使用Nagle算法。

kcxp.ini中配置：直接在[Nagle]项下写：NetAddr几=NO（或YES）。没有配置表示NO——不使用Nagle算法。

此处每个NetAddr是干什么用的，参看4.1.1章节“节点”中的各个地址。


4.1.6 “SSL”属性页（[SSL]配置项） - KCXP操作手册

4.1.6 “SSL”属性页（[SSL]配置项）

图4-1-8 “SSL”属性页

“SSL”对应kcxp.ini中的[SSL]项。

界面配置：在“地址项”下拉框中选择NetAddr，然后再到“值”的框中手动输入要在该NetAddr下的SSL配置，如：YES,kcxproot.pem, server.pem, 123456, ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH, YES, NO

kcxp.ini中配置：直接在[SSL]项下写：NetAddr几=SSL的配置。没有配置表示不使用SSL

此处每个NetAddr是干什么用的，参看4.1.1章节“节点”中的各个地址。

linux kcxp暂不支持。


4.1.7 “命令/监控服务器”属性页（[CommServer]配置项和[Monitor]配置项） - KCXP操作手册

4.1.7 “命令/监控服务器”属性页（[CommServer]配置项和[Monitor]配置项）

图4-1-9 “命令/监控服务器”属性页

“命令/监控服务器”属性页对应kcxp.ini中的[CommServer]项和[Monitor]项。

界面名称 | kcxp.ini配置项名称 | 说明
命令服务器侦听地址 | CommServIP | 在kcxp.ini中的[CommServer]项下的配置，表示本xp使用哪个ip和端口侦听xpcc的接入。 xpcc要连接这个xp，需在kcxpcli.ini中配置此处的ip和端口
命令服务器侦听端口 | CommServPort
客户端的网段范围 | CommCliIP | 在kcxp.ini中的[CommServer]项下的配置，配成NULL
监控服务器侦听地址 | IPAddr | 在kcxp.ini中的[Monitor]项下的配置，表示本xp使用哪个ip和端口侦听kcxpmanager的接入。 kcxpmanager要连接这个xp，需在kcxpmanager.ini中配置此处的ip和端口
监控服务器侦听端口 | Port


4.1.8 “Option”属性页（[Option]配置项） - KCXP操作手册

4.1.8 “Option”属性页（[Option]配置项）

图4-1-10 “Option”属性页

“Option”属性页对应kcxp.ini中的[Option]项。

界面名称 | kcxp.ini配置项名称 | 说明
可靠消息路径 | PersistDir | 可靠消息的路径。点击kcxp界面的自动配置后，该值为.\persist
日志路径 | LogDir | 日志的路径。点击kcxp界面的自动配置后，该值为.\log 在10.11(8.8)及以上的版本中，日志路径在[Log]项下的LogDir配。
定时队列路径 | TimerQueueDataDir | 可靠消息的路径。点击kcxp界面的自动配置后，该值为.\Timer


4.1.9 [Keeplive]配置项 - KCXP操作手册

4.1.9 [Keeplive]配置项

这是kcxp的保活设置，需要在NetAddr几使用socket的保活机制，就配置NetAddr几=6,2。每个NetAddr是干什么用的，参看4.1.1章节“节点”中的各个地址。


4.1.10 [Protocol]配置项 - KCXP操作手册

4.1.10 [Protocol]配置项

在kcxp_v10.11(8.8)及以上的版本中，需要在[Protocol]配置项（若没有，增加）下面配上：Protocol1=KCBP协议,0,BpProtocol.dll，否则需要解析BP协议的流量控制和消息转发做不了。


4.1.11 [Log]配置项 - KCXP操作手册

4.1.11 [Log]配置项

在kcxp_v10.11(8.8)及以上的版本中，增加了日志的配置项[Log]，它的各子项配置如下：

LogDir：日志路径。缺省值为.\log

FileSize：每个日志文件大小，单位为字节，最小为10240。缺省值为1024000

FileAttr：日志文件命名方式，0为按类型命名，1为按类型+级别命名。缺省值为1

LogOp：日志title格式，0为日志title什么都不写，1为日志title写xp的进程号，2为日志title写xp调用日志模块的线程号，4为日志title写xp的程序名，8为日志title写xp的ip，16为日志title写此条日志的事件id（比如是进队列，还说出队列，还说发往客户端等等）。可配置为以上值中任意一个或任意几个的和。缺省值为0

Recway：是否循环记日志，1为循环日志，0为线性日志。缺省为0。该配置在kcxp_v10.11(8.8) build 140801及以上的版本才有。

Groupnum：若是循环日志，那么同一类型的日志写到多少个开始循环。缺省值为7

Message、Queue、MCA、UIS、Cluster、DeadLetter、Debug：消息日志的开关、队列日志的开关、MCA日志的开关、客户端日志的开关、死信日志的开关、调试日志的开关，其中消息日志、队列日志、MCA日志、客户端日志，开关打开后都需要再配置具体的要记哪些消息、哪些队列、哪些MCA、哪些客户端的日志，详见3.15章节“日志配置”或4.10章节“日志设置”。


4.1.12 [LocalCommu]配置项 - KCXP操作手册

4.1.12 [LocalCommu]配置项

在kcxp_v10.20(8.20)及以上的版本中，用户可以在[LocalCommu]项下配置Enable来表示该xp是否支持本地通讯，1表示使用，0表示不使用。缺省值为0。

要想客户端与kcxp使用本地通讯，除了客户端需与kcxp同机以及kcxp端如上打开本地通讯开关，还需客户端使用15.20160909及以后版本的kcxpapi.dll。


4.2 集群 - KCXP操作手册

4.2 集群


4.2.1 集群简介 - KCXP操作手册

4.2.1 集群简介

KCXP支持集群化部署，集群内的KCXP之间能够消除单点故障，是互为备份的关系，同时也兼具负载均衡功能。

使用集群功能，只需在KCXP端配置，客户端程序不需要做任何改变。KCXP集群对客户端程序来说是透明的：集群内某个节点故障后，其客户端将被集群内其他节点自动接管，但是前提是客户端必须在集群节点都未故障时做了一次连接。


4.2.2 集群配置 - KCXP操作手册

4.2.2 集群配置

假设有两台KCXP：KCXP1的IP为192.168.204.7，节点编号为10000088；KCXP2的IP为192.168.10.97，节点编号为10000087。现在要在这两台KCXP之间建立一个集群，那么我们在KCXP1的kcxp.ini中如图4-2-1配置：

图4-2-1 在KCXP1的kcxp.ini中配置集群

在KCXP2的kcxp.ini中如下配置：

如此配置后，启动两个KCXP，它们就在同一个集群中了。连接KCXP1（KCXP2）的客户端，在KCXP1（KCXP2）故障后会自动连接到KCXP2（KCXP1）继续做业务。

对于windows版的KCXP，除了在kcxp.ini中配置，还可以在KCXP的界面中完成集群的配置，以上文中的KCXP1为例：

ü 第一步：点击KCXP界面的“手动配置” [image] ，将弹出如下对话框：

ü 第二步：点击按钮“下一步”，对话框显示为：

ü 第三步：点击标签页“集群与负载”，对话框显示为：

在“集群ID”中填入“00111“，在“Cluster1地址”中填入“192.168.10.97,6006,TCP,10000087”，然后点击“保存”按钮进行保存，再点击“取消”按钮退出：

如果KCXP是在公网环境下运行，客户端连接的是KCXP的外网IP和端口，那么这时候就需要在客户端程序目录下的kcxpapi.ini（若不存在该文件，则新建）中如下配置了：


4.2.3 集群的显示 - KCXP操作手册

4.2.3 集群的显示

在集群配置好之后，启动两台KCXP，在KCXP界面的“集群”标签页就可以看到对方的信息了：

图4-2-2 KCXP集群的显示


4.2.4 特别说明 - KCXP操作手册

4.2.4 特别说明

ü 对于同一集群的节点，在KCXP.ini中的[exit]和[SSL]配置顺序必须完全相同。

ü 对于同一集群的节点，在KCXP.ini中的[node]下的所有NetAddr必须完全相同（除了其中各自的ip）。

如：KCXP A和KCXP B做集群，A的ip是192.1.1.1，B的ip是192.1.1.2，如果A的kcxp.ini中的[node]下的NetAddr如下配置：

NetAddr1=TCP,127.0.0.1,21000,UIS

NetAddr2=TCP,192.1.1.1,20000,MCA

NetAddr3=TCP,192.1.1.1,21000,UIS

那么B的kcxp.ini中的[node]下的NetAddr要如下配置：

NetAddr1=TCP,127.0.0.1,21000,UIS

NetAddr2=TCP,192.1.1.2,20000,MCA

NetAddr3=TCP,192.1.1.2,21000,UIS

ü 对于同一集群的节点，接入控制必须相同、流量控制必须相同、消息转发必须相同。

接入控制是KCXP.ini中的[CONNCTRL]，以及文件kcxpconnctrl.xml

流量控制是KCXP.ini中的[FlowCtrl]，以及文件kcxpflowctrl.xml

消息转发是KCXP.ini中的[Exit]，以及文件kcxpexit.xml（8.6及以下版本、10.1及以下版本为kcxp.dat和exit.ini）

ü 对于同一集群的节点，必须具有相同的远端队列定义（即文件kcxprdef.dat）。

ü 不能在路由关系的两个KCXP之间建集群（IP、节点编号均不能与路由XP的相同）。


4.2.5 负载均衡 - KCXP操作手册

4.2.5 负载均衡

从10.15（8.15）build20150609版本开始，KCXP支持客户端每次连接都连接当前集群中负载值最小的KCXP。该功能除了要求KCXP最低版本为10.15（8.15）build20150609，还要求客户端使用的kcxpapi.dll的最低版本为15.20150716（查看kcxpapi.dll的属性时，若没有版本信息，其版本肯定比此处要求的低）。

在配置上，KCXP如4.2.2章节配置好集群后，客户端若要使用负载均衡功能，需要在其kcxpapi.ini（若不存在该文件，则新建）的[Option]下配置LoadMode=1，如：

该项配为0或者不配，表示客户端不使用负载均衡：该客户端配置了连哪个xp就连哪个xp；

配为1表示客户端使用负载均衡：该客户端每次连接都连负载最小的KCXP；

配为2表示客户端使用异步应答模式：保证该客户端所有连同一个KCXP。

如果某客户端的kcxpapi.ini中配置了要连接很多个KCXP（非集群关系），即配了很多个[QMgr]，那么也可以在各个[QMgr]下配置LoadMode，对每个KCXP使用不同的LoadMode。


4.3 路由（级联） - KCXP操作手册

4.3 路由（级联）

在我们实际KCXP生产部署中，涉及到营业部和总部时，由于营业部客户端程序不能直接访问总部KCXP，我们通常在营业部也部署KCXP，然后在营业部KCXP和总部KCXP之间建立级联。


4.3.1 添加路由 - KCXP操作手册

4.3.1 添加路由

假设总部的KCXP和营业部KCXP的基本信息如下：

KCXP | IP | 节点编号 | 队列管理器名
总部（做路由的服务端） | 192.168.10.114 | 00000114 | kcmm_114
营业部（做路由的客户端） | 192.168.204.7 | 10000088 | xudd

ü 第一步：在总部KCXP的xpcc中：

addroute -n 10000088 -m xudd -p 1 -a 192.168.204.7 -o 20000 -t 0 -u KCXP00 -w 888888 -d 0 -c 1 -r 1

成功后用sync -a（或sync -n ROUTE）存盘

ü 第二步：在营业部KCXP的xpcc中：

addroute -n 00000114 -m kcmm_114 -p 1 -a 192.168.10.114 -o 20000 -t 0 -u KCXP00 -w 888888 -d 0 -c 1 -r 0

成功后用sync -a（或sync -n ROUTE）存盘

ü 第三步：检查路由连通性

Ø 方法一：

在总部xpcc：checkroute -n 10000088

营业部xpcc：checkroute -n 00000114

Ø 方法二：对于Kcxpmanage监控到的KCXP（包括Win版和Linux版），还可以在KCXP界面的“节点”标签页查看

对于kcxp_v10.15（8.15）build20151016及以上的版本，支持在KCXP界面操作路由，具体操作方法可参考4.3.4章节。


4.3.2 创建远程队列 - KCXP操作手册

4.3.2 创建远程队列

路由创建成功后，营业部的客户端程序可以在连接上营业部的KCXP之后，指明将请求消息发送到跟该KCXP路由相通的某节点的某队列中去（指明节点编号和队列名）。

而实际上，营业部的客户端程序可能根本就不知道总部KCXP的节点编号，那么也可以通过在营业部KCXP中创建远程队列，来实现将请求消息发送到远程节点的队列中去，方法如下：

在营业部KCXP的xpcc中：addrdef -n req1 -c 00000114 -d req_yyb -s 0

成功后用sync -a（或sync -n RDEF）存盘

如此操作后，营业部的客户端程序将请求消息放到req1队列，就等于把消息放到总部00000114的req_yyb队列。

对于kcxp_v10.15（8.15）build20151116及以上的版本，支持在KCXP界面操作远程队列，具体操作方法可参考4.3.5章节。


4.3.3 添加路由之checklist - KCXP操作手册

4.3.3 添加路由之checklist

添加路由后，若发现该路由不通，请按照下表进行确认：

序号 | checklist | 备注
1 | 创建路由的两个KCXP的大版本号相同 | 8.x和10.x的KCXP无法连通路由
2 | 创建路由的两个KCXP的集群ID的前4位不同 | 若有一方集群ID为00000，则不用check该项。
3 | 创建路由的两个KCXP的集群ID不要同时为空 |
4 | 创建路由的两个KCXP之间未配置集群 | 虽然集群号前4位不同，但有一方在集群中配置了对方信息也不行
5 | 路由KCXP的节点编号和队列管理器名，不要与本KCXP的重名，也不要与本KCXP的其他路由KCXP重名 |
6 | 在addroute命令中，每个参数都没写错 | 该项很重要！尤其是-n、-m，填写对方的节点编号和队列管理器（到kcxp.ini中查看），大小写敏感！并确认你查看的kcxp.ini确实是在KCXP服务路径下的
7 | 请确定在两个KCXP中都addroute，并且是先在服务端KCXP中做的(-r 1这端)，后在客户端KCXP中做的(-r 0这端) | 该项不一定会导致路由不通，但还是请按照该顺序操作。如果两个xp都已经建好路由并存盘了，就把两个xp都关掉，然后先启动服务端xp，再启动客户端xp
8 | 若是某个KCXP是在addroute命令之后重启了，请确定addroute之后使用sync存盘了 |
9 | 请确定服务端KCXP的kcxp.ini中配置的用于侦听MCA的端口是20000 | 如果配置的不是20000，则在对方KCXP（客户端KCXP）的addroute中-o后面填写该配置端口
10 | 请确定服务端KCXP配置的侦听MCA的端口是对外开放的 | 可使用telnet来确认


4.3.4 KCXP界面操作路由 - KCXP操作手册

4.3.4 KCXP界面操作路由

打开kcxp_v10.15（8.15）build20151016及以上的KCXP界面的“节点”标签页：

点击“显示路由”按钮，弹出：

点击显示路由中的“添加”按钮：

在显示路由中选中某行，点击“修改”按钮：

在显示路由中选中某行，点击“探测联通性”按钮：

在显示路由中选中某行，点击“删除”按钮：

在只开启KCXP界面而未启动KCXP时，也可以“显示路由”，并对路由做增删改的操作。此时是直接操作KCXP界面目录下的kcxproute.dat文件，在你点击右上角的关闭按钮时询问你是否保存，在保存之后，启动该KCXP服务，即使用刚刚修改后的路由。


4.3.5 KCXP界面操作远程队列 - KCXP操作手册

4.3.5 KCXP界面操作远程队列

打开kcxp_v10.15（8.15）build20151016及以后的KCXP界面的“节点”标签页：

点击“显示远程映射”按钮，弹出：

点击显示远程映射中的“添加”按钮：

在显示远程映射中选中某行，点击“修改”按钮：

在显示远程映射中选中某行，点击“删除”按钮：

在只开启KCXP界面而未启动KCXP时，也可以“显示远程映射”，并对远程映射做增删改的操作。此时是直接操作KCXP界面目录下的kcxpremotedef.dat文件，在你点击右上角的关闭按钮时询问你是否保存，在保存之后，启动该KCXP服务，即使用刚刚修改后的远程映射。


4.3.6 常见问题 - KCXP操作手册

4.3.6 常见问题

1、为什么我创建路由之后，checkroute报2290的错误？

2、为什么我创建路由之后，在KCXP界面的“节点”中看不到对方信息（或是显现对方“不连通”）？

答：这其实都是创建的路由没有通。解决办法之步骤：

第一步：请先对照4.3.3章节——添加路由之checklist，做checklist；

第二步：如果checklist均通过，则把两个KCXP都停止，之后再启动服务端KCXP，最后启动客户端KCXP；

第三步：如果上一步还未解决，则查看两个KCXP的错误日志，看是否有记录相关的日志。


4.4 系统切换 - KCXP操作手册

4.4 系统切换

该功能模块适用的场景是：KCXP1与KCXP2、KCXP3都建立了路由，KCXP2、KCXP3是一样的功能系统，它们之间是逻辑上的主备关系（两个KCXP并没有任何关系）。正常情况下，KCXP2是主用节点，KCXP1的客户端通过KCXP2来做业务。当KCXP2故障时，我们可以通过在KCXP1上“系统切换”来实现到KCXP2的所有业务都切换到KCXP3（备用节点）上来完成；当KCXP2（主）恢复使用时，我们也可以切回到KCXP2。

在kcxp_v10.15（8.15）build20160113及以上的版本中，支持一个主用节点对用多个备用节点。


4.4.1 在系统切换中添加主备节点 - KCXP操作手册

4.4.1 在系统切换中添加主备节点

要使用切换功能，首先要添加好需要切换的主用节点。

ü 方法一：KCXP启动之前，在kcxp.ini中配置：

保存后，启动KCXP。

ü 方法二：对于windows版的KCXP，在KCXP运行过程中，在KCXP界面的“系统切换”标签页：

在这里，我们将00000114做为主用节点，10000011做为备用节点，所以

Ø 先将第二条删掉：在“切换列表”中选中第二条，然后点击“删除”按钮；

Ø 再将第一条修改为我们需要的：在“切换列表”中选中第一条，然后在“切换列表”上面的“名称”中填写“test”、“备用目标节点”中填写“10000011”，再点击“修改”按钮：

kcxp_v10.15（8.15）build20160113及以上的版本中无“修改”按钮，需要删掉后重新添加。


4.4.2 切换 - KCXP操作手册

4.4.2 切换

在添加了主备节点后，我们可以在主备或备主之间进行切换了。

ü 方法一：打开一个cmd窗口（非windows版的叫终端），进入到KCXP所在的目录，执行切换命令。

指定切换哪个（些）主用节点到其备用节点：xpcc -n 1:主用节点编号

所有的都切换到各自的备用节点：xpcc -s 1

注意：因为kcxp_v10.15（8.15）build20160113及以上的版本一个主用节点可对应多个备用节点，所以使用xpcc命令切换时要指定主用节点和备用节点：xpcc -n 1:主用节点编号;备用节点编号。而xpcc -s 1对于有多个备用节点的主用节点，是切换到第一个备用节点。

ü 方法二：对于windows版的KCXP，我们还可以在KCXP界面的“系统切换”标签页进行切换：在“切换列表”中点中需要切换的一行，然后双击或者点击“切换”按钮，并在弹出的对话框中进行确认：

切换成功之后，界面变为：

若是需要切回到主用节点，则选中“已经切换”并需要切回的一行，然后双击或者点击“切换”按钮，并在弹出的对话框中进行确认。


4.5 转发插件 - KCXP操作手册

4.5 转发插件

在KCXP的使用中，如果想实现将某些条件的消息转发到别的KCXP或别的队列中，可通过使用转发插件来实现，如transmit.dll、ExitOnXML.dll、BpTransmit.dll（非windows版的为相应的so）。


4.5.1 转发插件的加载 - KCXP操作手册

4.5.1 转发插件的加载

要使用转发插件，首先要在KCXP上加载相应的插件，各版本KCXP加载各转发插件的方法都是一样的。下面以transmit.dll为例来说明如何加载转发插件。

首先在KCXP停止的状态下，将transmit.dll放入到KCXP的exit目录下。然后启动KCXP，做如下操作：

ü 第一步：在xpcc中使用dispexit -a命令查看transmit.dll是否已存在。存在，转至第三步；不存在，转至第二步。

ü 第二步：在xpcc中使用addexit命令来加载transmit.dll：addexit -f transmit.dll

成功后，使用sync -a（或sync -n EXIT）命令存盘。

ü 第三步：查看kcxp.ini的[Exit]项中是否在相应的NetAddr下挂载了该插件。如果已挂载，转至第四步；没有挂载，在相应的地址挂载并保持kcxp.ini。

[Exit]

NetAddr2=transmit.dll

说明：挂在NetAddr2下，会对从NetAddr2（见kcxp.ini的[Node]项NetAddr2中配置的ip和端口 [image] ）连入的客户端的消息进行转发。每个NetAddr可以挂载至多10个插件，之间用,隔开。

如果该KCXP还有其他ip和端口供客户端连接（如 [image] ），要对这些ip和端口进来的客户端消息进行转发的话，也在相应的NetAddr下挂载插件（即：NetAddr4=transmit.dll）。

如果是要对路由KCXP过来的消息进行转发，

Ø 首先将该插件挂在NetAddr1下（即：NetAddr1=transmit.dll），这样从“与本KCXP的该ip和端口建了路由且为客户端的KCXP”过来的消息都会经过该插件的处理。

如果该KCXP还有其他ip和端口供路由XP连接（如 [image] 、 [image] ），要对这些ip和端口的客户端路由XP过来的消息进行转发的话，也在相应的NetAddr下挂载该插件。

Ø 其次，使用xpcc命令disproute查看路由表中有没有“与本KCXP建了路由且为服务端的KCXP”（判断标准：Direct为0 [image] ），如果有，查看它们的RouteIndex [image] ，加上11，在这个NetAddr下也可以挂载插件（像我这条服务端路由XP的RouteIndex为0，那么kcxp.ini配上NetAddr11=transmit.dll），那么从这个路由XP过来的消息也会经过该插件的处理。其他“与本KCXP建了路由且为服务端的KCXP”，同样配置。

ü 第四步：配置转发插件的规则并保存（每个转发插件都有自己的配置文件和配置方法，将在下面的章节详细介绍）。

ü 第五步：重启KCXP。


4.5.2 转发插件transmit.dll的配置 - KCXP操作手册

4.5.2 转发插件transmit.dll的配置

transmit.dll只能在kcxp_v8.8以下版本、kcxp_v10.11以下中使用，其配置文件为exit.ini，在其中[transmit]下面进行转发规则的配置。修改了exit.ini，需要重启KCXP才会生效。

当前发布出去的transmit.dll有两个版本，它们的配置略有不同：一个是配置五个参数的，另一个是配置八个参数的。

ü 配置五个参数的transmit.dll，它的exit.ini中如下配置：

第一条转发规则bus1：将功能号为410510的请求转发到本节点的req1队列。

第二条转发规则bus2：将功能号为lbmt101且机构代码为3115的请求转发到10311502的req_history队列。

第三条转发规则bus3要联合它配置的app1一起看，它的意思是：将功能号为103开头且字段F_SUBSY_SN的值为38的请求转发到85075501的req_stds队列。

第四条转发规则bus4联合它配置的app2一起看，它的意思是：将功能号为1234开头且字段fundid的值为abcd的请求转发到15075501的req_stds队列。

ü 配置八个参数的transmit.dll，它的exit.ini中如下配置：

第一条转发规则bus1：将功能号为41开头、机构为1201、从10000002节点过来要到10000003节点的req1队列去的请求转发到10000011节点的req2队列。

第二条转发规则bus2：将功能号为41开头、机构为1201、从10000001节点过来的要到reqzb队列去的请求转发到本节点的req队列。

第三条转发规则bus3：将本要到a队列中功能号为12345678的请求转发到本节点的bs队列。

注：transmit.dll最多配置512条转发规则。消息匹配顺序为bus1、bus2、bus3，……；若中间有间断，则后面的bus不生效：若bus8前面的都配了，但是bus8没配，那么大于bus8的bus都不会生效。


4.5.3 转发插件ExitOnXML.dll的配置 - KCXP操作手册

4.5.3 转发插件ExitOnXML.dll的配置

ExitOnXML.dll只能在kcxp_v8.8以下版本、kcxp_v10.11以下中使用，它可以对报文体内的多个字段进行配置，其配置文件为exit.xml，下面给出一个样本，以它为例来说明如何配置。修改了exit.xml，需要重启KCXP才会生效。

<?xml version="1.0" encoding="gb2312" ?>

<exit>

<kcxp>

<ChannelName/>

<CodedCharSetId/>

<CompMode/>

<CorrelId/>

<DataLength/>

<DestNodeCode/>

<DestQ/>

<DestQm/>

<Encoding/>

<EncryptMode/>

<Feedback/>

<Flow/>

<GroupId/>

<InitTime/>

<LifeTime/>

<MsgFlags/>

<MsgId/>

<MsgSeqNumber/>

<MsgType/>

<Offset/>

<OriginalLength/>

<Persistence/>

<Priority/>

<PutAppName/>

<PutAppType/>

<PutDate/>

<PutTime/>

<ReplyToQ/>

<ReplyToQMgr/>

<Report/>

<Reserved/>

<RouteType/>

<SrcNodeCode/>

<StrucId/>

<Version/>

</kcxp>

<databody>

<headdata>

<type type="int" packtype="SL" offset="2" length="1"/>

<funcid type="string" packtype="SL" offset="94" length="8"/>

<orgid type="string" packtype="SL" offset="113" length="4"/>

<!--parm1 type="double" packtype="DL" delimiter="|" index="2"/-->

</headdata>

<busidata dllname="KCBPPacketOpApi.dll" callback="">

<custid type="string"/>

<!--custorgid type="string" from="request" delimiter="; |" index="2 1 "/-->

</busidata>

</databody>

<bus>

<if expression="@kcxp.DestQ==TESTQ||@kcxp.DestQ==TESTQ1||@kcxp.DestQ==TESTQ2" then="DestQ=TESTQ11, mode=T"/>

<!--if expression="@kcxp.MsgId==123456" then="DestQ=req12, mode=T"/>

<if expression="@headdata.type==2 and @kcxp.DestQ==TESTQ1" then="return=abcdefghigk"/>

    <if expression="@headdata.funcid>=111111
|| @kcxp.CorrelId==@kcxp.MsgId" then="DestNodeCode=00000001,DestQ=TESTQ11,
mode=T"/>

<if expression="@busidata.custid==4?0565" then="DestQ=req1b, mode=C"/>

<if expression="strlen(@busidata.custorgid)<3" then="DestNodeCode=00000002,DestQ=req1c, mode=C"/-->

</bus>

</exit>

1、 kcxp结点的子结点列出的是kcxp包头中的所有变量，以供转发条件中使用。

2、 headdata结点的子结点配置的是转发条件中所需要的业务报文头中的变量。

结点名为变量名。

type属性的值为此变量的类型：int(整形)、string(字符串)、double(浮点型)、bool(布尔型)。

packtype属性的值为此变量的取值方式：SL(变长)、DL(定长)，变长需配置偏移（offset）和长度（length），定长需配置分隔符（delimiter）及其序号（index）。

3、 busidata结点的子结点配置的是转发条件中所需要的业务报文体中的变量。

结点名为变量名。

type属性的值为此变量的类型。

若此变量是在其他变量中取得，还需配置它是从哪个变量取到（from），以及分隔符（delimiter）和序号（index）。

4、 bus结点的子结点配置的是转发条件以及满足条件时的处理动作，结点名为if。个数无限制，匹配顺序为文档中配置的先后顺序。

5、 expression属性配置的是转发条件：变量名前面要加上此变量的来源处（@kcxp. @headdata.或@busidata.），支持通配符？，支持的操作符有：+、-、*、/、%、==、!=、>、>=、<、<=、&&、||、!、&、|、and、or、not、atoi、atof、strcmp、strncmp、strlen、strcat、IsIn

后七种为函数类型的操作符，其中IsIn函数的作用是“判断第一个参数是否为后面枚举的某个值”，如：IsIn(5,1,2,9)，判断5是否等于1或等于2或者等于9

6、 then属性配置的是满足转发条件时的处理动作：转发（mode=T）、复制转发（mode=C）、向其应答队列返回一个自组消息（return=自组消息的内容）。

转发和复制转发需配置转发的节点（不配置说明转发到本节点）和队列。

7、 对于其中出现的xml文件中的特殊字符，现将它们转义（括号内为转义后的字符）：>(&gt;)、<(&lt;)、&(&amp;)


4.5.4 转发插件BpTransmit.dll的配置（消息路由） - KCXP操作手册

4.5.4 转发插件BpTransmit.dll的配置（消息路由）

BpTransmit.dll只能在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中使用，它可以对报文体内的多个字段进行配置，并且配置可实时生效，不需要重启KCXP。

在按照4.5.1章节加载了BpTransmit.dll，并启动KCXP后，在KCXP界面的“消息路由”标签页看到如下显示：

图4-5-1 “消息路由”标签页

【如果在该界面的左边树“插件”下无任何数据，则在KCXP目录下新建文件kcxpexit.xml，并将以下内容拷贝到文件中：

<?xml version='1.0' encoding='gb2312' ?>

<exit>

<BpTransmit.dll state="1" attr="0" desc="新版转发插件"/>

</exit>

然后再点该界面的“刷新”按钮，就可以看到如上图显示了。】

现在，你就可以添加并配置你的转发规则了。点击“添加”按钮，在列表中将增加一行：

图4-5-2 添加一条转发规则

1、 在“名称”列填写该条规则的名称（如“rule1”）。

2、 在“描述”列填写对这条规则的描述（可不填，但建议还是好好填写，以方便其他人员了解该条规则到底是干什么的，如：“将功能号不为410000或者机构代码为1234的消息，转发到本节点的req1队列、00000001节点的req_test队列和00000002节点的req_yyb队列”）。

3、 在“规则”列配置具体的转发条件。点击该单元格，会有“编辑”按钮。

点击“编辑”按钮，将进入“编辑规则”页面进行转发规则的编辑：

图4-5-2 转发规则的编辑

如上述“描述”中的“将功能号不为410000或者机构代码为1234的消息”【先双击“KCBP”列表中的“功能号”，再单击“运算符号”中的“!=”按钮，再在“规则表达式”框中手动填写“410000”，再单击“运算符号”中的“||”按钮，再双击“业务报文”列表中的“win客户代码”（若是linux客户端，则选择“U客户代码”），再单击“运算符号”中的“==”按钮，再在“规则表达式”框中手动填写“1234”】，转化为规则表达式是：@headdata.funcid!=410000||@busidata.custid==1234

点击“确定”按钮回到KCXP界面（“取消”按钮，放弃此次编辑）。

注意：对于业务报文中的字段，若消息送了该字段，但是未送值（或者说送的值为空），那么在规则表达式中可判断该字段的strlen是否为0；若消息未送该字段，对于build 20141229之前的版本，当该字段值为0，对于build 20141229之后（含）的版本，当该字段值为#NULL# 。如判断业务报文中的fundid的值是否为12或34，或者是送了空，或者是没送，build 20141229之前的版本这么配置规则表达式：IsIn(@busidata.fundid,12,34,0) || strlen(@busidata.fundid)==0 ；build 20141229之后（含）的版本这么配置规则表达式：IsIn(@busidata.fundid,12,34,#NULL#) || strlen(@busidata.fundid)==0

若运算符中的字符（如=、>、|等）要做为普通字符使用，请在字符前使用\进行转换。如，判断字段a的值是否为>，配置规则是：@a==\>

若你需要配置的字段不在“业务字段”中，该如何配置？

方法一：在“规则表达式”框中手动填写。如你的条件为“判断业务报文中字段a的值是否为100”，则可以手动在“规则表达式”框中填写：@busidata.a==100

方法二：在KCXP目录下找到BpProtocol.xml并打开，在其busidata节点下增加你的字段并保存。在下次点击 [image] 此处的“编辑”时即时生效。

“运算符号”各函数的具体意思，可参考5.2章节。

4、 在“处理方式”列选择处理方式 [image] 。

ü 转发：将满足条件的消息转发到某个（些）KCXP的某个（些）队列。

ü 复制：将满足条件的消息复制到某个（些）KCXP的某个（些）队列。

ü 返回：给满足条件的消息的应答队列返回一个应答。

转发和复制之间的关系：复制规则之间、复制和转发之间是共享的，转发规则之间是互斥的，即：对于多条转发复制规则，复制后还可以转发，转发后也可以复制但不能再次转发。

一个消息最多支持8个目的地。

5、 在“动作”列配置满足规则后消息的去向（目标节点目标队列）、或是满足规则后给应答队列回复的应答包的内容。单击该单元格，也有“编辑”按钮。

若“处理方式”选择的是“返回”，点击该“编辑”按钮弹出的是从电脑中选择文件的界面：

图4-5-3 选择给满足规则的消息回应答的内容

当你选中某个文件并点击“打开”按钮后，该文件的内容会显示在“动作”单元格，KCXP会将它作为应答包的内容返回给满足规则的消息的应答队列。

若“处理方式”选择的是“转发”或“复制”，点击“动作”中的“编辑”按钮则弹出如下界面：

如上述“描述”中的“转发到本节点的req1队列、00000001节点的req_test队列和00000002节点的req_yyb队列”【在“编辑动作”下面的编辑框中手动输入Dest=:req1|00000001:req_test|00000002:req_yyb（分隔符分别为英文的:和|）。如果目的地只有一个（如00000001节点的req_test队列），则在编辑框中手动输入Dest=00000001:req_test或者DestNodeCode=00000001,DestQ=req_test，如果是转发或复制到本节点的队列，则第二种方式中只填写DestQ也可】。编辑完毕后，点击“确定”按钮回到KCXP界面（“取消”按钮，放弃此次编辑）。

kcxp_v10.11(8.8) build20141229及以后的版本，动作中除了上述两种，还支持另外两种：

：将消息转发或复制到一个队列。如果是转发到本XP的某个队列，可以只配DestQ

：将消息转发或复制到多个目的地。目的地之间用|隔开，同一个目的地内用:隔开节点编号和队列名。节点编号写NULL表示转发到本XP的队列。

：将消息转发或复制到多个目的地中的一个。此种格式配置为了均衡目的地的压力，目的地有多个KCXP，每次转到其中不同的KCXP。目的地之间用;隔开，同一个目的地内用:隔开节点编号和队列名。节点编号写NULL表示转发到本XP的队列。

：根据规则表达式的值的不同，将消息转发或复制到不同的KCXP。如规则表达式配置的是：@headdata.funcid，动作这里配置的是：IF=1?10000088:req1;2?NULL:req2;3?00000001:req2;#ELSE#?00000002:req，其意思就是：funcid为1的消息，转到10000088的req1队列；funcid为2的消息，转到本xp的req2队列；funcid为3的消息，转到00000001的req2队列；funcid为其他值的，转到00000002的req队列。

#ELSE#可以不配置，表示规则表达式（本例中为funcid）的值为其他值不转。

6、 在“状态”列选择该条转发条件的开关是否打开 [image] 。

ü 1：开关打开，该条转发规则生效。

ü 0：开关关闭，该条转发规则不生效。

在上述操作后，该条转发条件形成的效果是：

你可以继续添加新的转发条件，或删除、修改（需要修改哪个单元格，直接单击即可进行编辑）已配置的转发条件。配置完之后，点击“保存”按钮（在KCXP界面的“事件”标签页将显示 [image] ，若有错误发生会用红色显示错误），即可以按照你配置的转发条件对消息进行转发了。

点击“刷新”按钮获取KCXP当前有关路由转发的配置。若是对路由转发做了增删改之后未点击“保存”而点击了“刷新”，那么刚刚做的增删改就没有了。

说明：KCXP会对进来的消息进行转发规则的匹配，匹配顺序是按照KCXP界面的消息路由页面转发条件的先后顺序。若是匹配到了某条状态为1的规则，则按照该规则的处理动作进行相应处理；若该条规则的处理方式是“返回”，则给其应答队列返回应答，退出插件处理；若该规则的处理方式是“复制”，则会继续往下匹配，有满足规则的复制或转发还会继续执行其中的复制或转发；若是该规则的处理方式是“转发”，也会继续往下匹配，有满足规则的复制还会继续执行其中的复制；若是所有的规则都不满足，则不改变消息的流向。


4.5.5 常见问题 - KCXP操作手册

4.5.5 常见问题

1、我使用BpTransmit.dll需要升级KCXP吗？

答：只要是kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本），就可以使用BpTransmit.dll转发。

若KCXP版本低于这些版本，则需要相应升级（原来是8.x版本的KCXP就升级到kcxp_v8.8或更高版本，原来是10.x版本的KCXP就升级到kcxp_v10.11或更高版本）。

升级后，确认KCXP目录下有BpProtocol.dll和ParserExpr.dll，exit文件夹中有BpTransmit.dll。

确认kcxp.ini中有如下配置：

[Protocol]

Protocol1=KCBP协议,0,BpProtocol.dll

2、为什么我在xpcc中使用addexit命令加载转发插件时报7100的错误？

答：1）请确认你要加载的插件放在KCXP的exit目录下。

2）请确认该插件依赖的库放在了KCXP目录下。

3）对于windows版的KCXP，还需确认你放入的KCXP的目录是windows服务中KCXP服务的目录（具体可查看2.1章节）

3、为什么我在xpcc中使用addexit命令加载转发插件时报100的错误？

答：说明该插件已加载了，无需重复加载。

4、为什么我在xpcc中使用addexit命令加载转发插件时报112的错误？

答：这是因为加载插件时，用户权限不够。对于kcxp_v10.11（8.8）及以上版本的kcxp，请使用发布时的kcxpuser.dat，不要用老版本的覆盖。

5、为什么消息未按照我配置的转发条件进行转发呢？

答：请按照下列步骤一步步的进行确认

1） 请确认你使用的转发插件跟你的KCXP的版本是相配的。

2） 请确认你使用的转发插件放在KCXP的exit目录下，转发插件依赖的库、配置文件在KCXP主目录下。

3） 请确认在kcxp.ini [Exit]中的相应NetAddr中挂了该插件。

4） 请确认该插件成功加载。使用xpcc命令（dispexit -a），显示的结果中有该插件，并且State为1，LoadDate和LoadTime有值且为KCXP的启动时间，如

ü 若是显示结果中没有该插件，则使用xpcc的addexit命令进行插件加载，再使用xpcc命令：sync -a，然后重启KCXP。

ü 若是State不为1，则使用xpcc命令：modexit -i 0 -s 1，（-i后面的0其实是dispexit -a结果中插件的ExitIndex，请按实际填写），再使用xpcc命令：sync -a

ü 若是LoadDate和LoadTime为空、或是显示的时间不是KCXP的启动时间，则查看KCXP日志，看KCXP加载该插件时报了什么错误。此种情况下，解决了问题需要重启KCXP。

5） 若要将消息转发到其他KCXP的队列，则要确认本KCXP和目标KCXP的路由是相通的（使用xpcc命令checkroute查看），且在目标KCXP上存在要转发过去的目标队列。

6） 请确认你的转发规则配置无误。

7） 对于BpTransmit.dll，每条转发规则都有一个开关，请确认你的消息匹配的那条规则的开关是开的（即状态是1）。

8） 确认你的消息是满足转发规则的！


4.6 安全控制 - KCXP操作手册

4.6 安全控制

本章节只适用于kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）。

KCXP启动后，用户在KCXP界面（非windows版的KCXP，也可以使用windows的KCXPManager监控）的“安全控制”标签页中看到如下显示：

图4-6-1 “安全控制”标签页

KCXP的安全控制分两块内容，一个非法连接入侵检测，另一个是白名单设置。非法连接入侵检测针对的是客户端程序，白名单针对的是所有连接程序。


4.6.1 非法连接入侵检测 - KCXP操作手册

4.6.1 非法连接入侵检测

如果有程序不使用KCXP的api去连接KCXP机器的21000端口（或者去telnet该机器的21000端口），KCXP虽然接收到了连接请求，但在后续的运行中未接收到客户端应该送入的一些信息，则认为该连接是非法连接。

对于这种非法连接入侵，可通过配置让KCXP对其进行检测并自动剔除。设置方法和步骤如下：

ü 第一步：在“安全控制”标签页的上部，勾上“非法连接入侵检测”：

ü 第二步：在编辑框中设置KCXP隔多少秒对非法入侵进行检测，点击“保存”按钮进行提交：

成功后，在KCXP界面的“事件”标签页将显示 [image] ，若有错误发生会用红色显示错误。

这样设置后，KCXP每10秒钟就会去检测是否有非法连接入侵，并将其剔除。若有非法连接入侵被剔除，在KCXP界面的“事件”标签页将显示告警信息告知哪个客户端ip的非法连接入侵被剔除了


4.6.2 白名单设置 - KCXP操作手册

4.6.2 白名单设置

在安全控制中还可以设置白名单，只有在白名单中的连接程序才能连入KCXP。白名单是以一个个IP区间来设置的，设置方法和步骤如下：

ü 第一步：在“安全控制”标签页的上部，勾上“校验客户端IP地址（白黑名单）”：

ü 第二步：点击“添加”按钮，将弹出设置框来增加一个白名单IP区间：

如允许192.168.204.1至192.168.204.100的IP地址连入，则如下设置后再点击“OK”按钮（“Cancel”按钮，放弃此次添加）：

操作后，在“安全控制”标签页下部的列表中将增加一行，如下显示：

ü 第三步：如果还允许其他IP区间的连接程序接入，重复第二步。

如需修改某个白名单IP区间，选中该行后点击“修改”按钮，弹出修改框，修改后点击“OK”按钮；

如需删除某个白名单IP区间，选中该行后点击“删除”按钮，点击弹出对话框中的“是(Y)”按钮。

ü 第四步：设置完毕后，点击“保存”按钮进行提交（该“保存”按钮实际是连同非法连接入侵检测设置一起保存）。在KCXP界面的“事件”标签页将显示 [image] （1 items指的是设置了一个白名单ip区间），若有错误发生会用红色显示错误。

该界面的“刷新”按钮是获取KCXP当前有关安全控制的配置。若是对安全控制做了增删改之后未点击“保存”而点击了“刷新”，那么刚刚做的增删改就没有了。

设置了白名单后，不在白名单ip区间的连接程序对KCXP进行连接都无法成功，在KCXP界面的“事件”标签页将显示错误日志


4.6.3 常见问题 - KCXP操作手册

4.6.3 常见问题

1、为什么我客户端程序所在机器的IP不在白名单内，我却还能连接上KCXP呢？

答：请确认你开启了白名单设置：在KCXP界面的“安全控制”标签页勾选上了“校验客户端IP地址（白黑名单）”

2、为什么我的程序连不上KCXP了？

答：请查看你的KCXP是否开启了白名单设置，并且你的程序所在机器IP是否在白名单内。


4.7 接入控制 - KCXP操作手册

4.7 接入控制

本章节只适用于kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）。

KCXP的连接程序在通过了白名单控制（具体可查看4.5.2章节——白名单设置）后还可以通过设置接入控制来对这些连接程序做进一步的控制。

KCXP启动后，用户在KCXP界面（非windows版的KCXP，也可以使用windows的KCXPManager监控）的“接入控制”标签页中看到如下显示：

图4-7-1 “接入控制”标签页


4.7.1 接入控制开关的打开 - KCXP操作手册

4.7.1 接入控制开关的打开

要在KCXP中使用接入控制功能，首先要在“接入控制”标签页勾上“接入控制开关”：

图4-7-2 打开接入控制的开关


4.7.2 接入控制规则的配置 - KCXP操作手册

4.7.2 接入控制规则的配置

点击“添加”按钮，添加一条接入控制规则，在列表中将增加一行：

图4-7-3 添加一条接入控制规则

1、 在“规则名称”列填写该条规则的名称（如“rule1”）：

2、 在“服务器IP”列填写你这条接入控制规则是要控制KCXP侦听的哪个（些）IP地址（连接程序要连入的IP地址）。

IP格式说明：此处IP格式支持单个IP、多个IP、IP范围、多个IP范围，多个IP（范围）之间用“,”（英文的逗号）隔开，IP范围的大小IP之间用“-”（英文的减号）隔开。“*”表示通配——限制所有的IP。如“192.168.1.1,192.168.2.2,192.168.10.1-192.168.10.100,192.168.20.100-192.168.20.222”，就是一个正确的可识别的IP格式。

3、 在“客户端IP”列填写你这条接入控制规则要控制哪个（些）IP地址的连接程序。此处的IP格式与第2点中的一样。

4、 在“最大连接数”列中填写的是“满足了这条控制规则的IP后，允许多少个连接”。

5、 “当前连接数”显示的是满足这条控制规则的当前连接的个数，不可编辑。

6、 在“控制类型”列选择这条控制规则适用于哪种客户端

ü cluster(0x8)：集群XP

ü KCXPManager(0x10)：我们通常说的KCXP界面

ü KCXP之间(0x2)：路由XP

ü XPCC(0x4)：KCXP命令服务器

ü 客户端程序(0x1)：使用KCXPAPI连接KCXP、可在队列放/取消息的应用程序

7、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“允许的客户端MAC”列填写该条控制规则允许哪些MAC的客户端程序连接进来。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。

MAC格式说明：支持单个MAC、多个MAC，多个MAC之间用“,”（英文的逗号）隔开。MAC中出现的英文字母全部使用小写，该列只填写“*”或什么都不填表示允许所有的MAC，每个MAC中也可以使用一个“*”匹配任意字符。如“01ca5fe094d5,a*,*59d,8ac*ef”。

8、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“允许的客户端程序”列填写该条控制规则允许哪些客户端程序连接进来。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。

客户端程序的格式说明：支持单个客户端程序名称、多个客户端程序名称，多个客户端程序名称之间用“,”（英文的逗号）隔开。客户端程序名称中出现的英文字母全部使用小写，该列只填写“*”或什么都不填表示允许所有的客户端程序接入，每个客户端程序名称中也可以使用一个“*”匹配任意字符。如“kcbp*.exe,kcxptest.exe”。

9、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“允许接入的用户名”列填写该条控制规则允许哪些用户连接进来。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。该列在kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本）中存在。

允许接入的用户名的格式说明：支持单个用户、多个用户，多个用户名之间用“,”（英文的逗号）隔开。该列大小写敏感，只填写“*”或什么都不填表示允许所有的用户接入，每个用户名称中也可以使用一个“*”匹配任意字符。如“KCXP00,*user”。

10、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“独占队列”列填写哪些队列只能被满足该条控制规则的客户端程序打开。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。

独占队列的格式说明：支持单个队列、多个队列，多个队列之间用“,”（英文的逗号）隔开。该列只填写“*”或什么都不填表示该条控制规则不独占任何一个队列。每个队列区分大小写且没有通配符。

一个队列可被多条控制规则独占。

11、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“可放消息的队列”列设置满足该条规则的客户端程序可以放消息到哪些队列。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。该列在kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本）中存在。

可放消息的队列的格式说明：支持单个队列、多个队列，多个队列之间用“,”（英文的逗号）隔开。该列大小写敏感，只填写“*”表示允许放消息到所有队列，什么都不填表示不允许放消息到任何队列，每个队列名称中也可以使用一个“*”匹配任意字符。如“TestQ,req_*”。

12、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“可无限制取消息的队列”列设置满足该条规则的客户端程序可以从哪些队列无限制取消息。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。该列在kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本）中存在。

此处的队列格式与第11点中的一样。

13、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“可按correlid取消息的队列”列设置满足该条规则的客户端程序可以从哪些队列按correlid取消息。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。该列在kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本）中存在。

此处的队列格式与第11点中的一样。

14、 当“控制类型”选择的是“客户端程序(0x1)”，你还可以在“可按msgid取消息的队列”列设置满足该条规则的客户端程序可以从哪些队列按msgid取消息。如果“控制类型”选择的不是“客户端程序(0x1)”，则该列设置无效。该列在kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本）中存在。

此处的队列格式与第11点中的一样。

15、 在“使能状态”列选择该条接入控制规则的开关是否打开 [image] 。有的版本，该列名称为“状态”，并且1表示开，0表示关。

ü 非使能：开关关闭，该条接入控制规则不生效。

ü 使能：开关打开，该条接入控制规则生效

像上面截图这样一条接入控制规则（因太长，分两行），它的意思是：对于IP为192.168.1.1至192.168.1.100或192.168.2.2的客户端程序，只允许它们做100个连接，并且只允许其中MAC地址为d结尾或者为01ca5fe094d5的机器的客户端程序接入，并且req_test和ans_test队列被该IP的客户端程序独占（不满足该条规则中客户端IP的程序无法打开这两个队列，除非它满足的其他接入控制规则的独占队列中也填写了这队列）。

完成一条接入控制规则后，你可以继续添加新的接入控制规则，或删除、修改（需要修改哪个单元格，直接单击即可进行编辑）已配置的接入控制规则。配置完之后，点击“保存”按钮（在KCXP界面的“事件”标签页将显示 [image] 或 [image] ，若有错误发生会用红色显示错误），即可以按照你配置的接入控制规则对连接消息进行控制了。

保存之后的接入控制规则，“服务器IP”、“客户端IP”、“当前连接数”、“控制类型”不可编辑。

点击“刷新”按钮获取KCXP当前接入控制的配置以及满足每条接入控制规则当前有多少个连接。若是对接入控制做了增删改之后未点击“保存”而点击了“刷新”，那么刚刚做的增删改就没有了。

对于kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本），在“保存”按钮后面还有两个按钮“上移”和“下移”：选中某条规则后，可上移和下移它的位置。


4.7.3 接入控制如何控制？ - KCXP操作手册

4.7.3 接入控制如何控制？

开启了接入控制的KCXP，在接收到某个程序的连接请求后，

1、 到接入控制中寻找“控制类型”为该连接类型的控制规则。如果没有，让该程序接入；如果有，跳至2。

2、 按照在界面配置的顺序，在这些“控制类型”匹配的控制规则中，寻找“服务器IP”是该程序要连接的IP、“客户端IP”是该程序所在机器IP的控制规则。如果没有，让该程序接入；如果有，跳至3。

3、 判断该条规则的“状态”：如果为“0”，则允许该程序接入，“当前连接数”+1；如果为“1”，跳至4；

4、 判断该条规则的“当前连接数”是否已达到了“最大连接数”。如果达到了，给该程序返回2400的错误，拒绝该程序接入；如果没达到，该程序不是客户端程序，则允许该程序接入，“当前连接数”+1，该程序是客户端程序，跳至5。

5、 判断该客户端程序的MAC地址是否是该条规则“允许的客户端MAC”。如果不是，给该程序返回2413的错误，拒绝该程序接入；如果是，跳至6。

6、 判断该客户端程序是否是该条规则“允许接入的客户端程序”，如果不是，给该程序返回2411的错误，拒绝该程序接入；如果是，跳至7（对于kcxp_v8.15 build20150725以前的版本（不含）、kcxp_v10.15 build20150725以前的版本（不含），则允许该程序接入，“当前连接数”+1）。

7、 判断该客户端程序送入的用户名是否是该条规则“允许接入的用户名”，如果不是，给该程序返回2414的错误，拒绝该程序接入；如果是，允许该程序接入，“当前连接数”+1。

8、 该客户端程序打开某个队列时，判断它满足的那条规则中是否独占该队列。如果独占，或者不独占但该队列也没有被其他规则独占，open成功；否则，open失败。

9、 对于kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本），某客户端程序往队列放消息时，判断该客户端IP是否有控制。如果没有，继续执行放消息操作；如果有并且“状态”为0，继续执行放消息操作；否则，判断该条控制下的“可放消息的队列”中是否包含该队列。如果包含，继续执行放消息操作；否则，不允许放，给该程序返回2415的错误。

10、 对于kcxp_v8.15 build20150725（或更高版本）、kcxp_v10.15 build20150725（或更高版本），某客户端程序从队列取消息时，判断该客户端IP是否有控制。如果没有，继续执行取消息操作；如果有并且“状态”为0，继续执行取消息操作；否则，判断该get方式下允许的队列中是否包含该队列。如果包含，继续执行取消息操作；否则，不允许取，给该程序返回2416的错误。


4.7.4 常见问题 - KCXP操作手册

4.7.4 常见问题

1、为什么我的程序连接不上KCXP了？

答：A.请查看你的KCXP是否开启了白名单设置，并且你的程序所在机器IP是否在白名单内。

B.请查看你的KCXP是否开启了接入控制，并且你的程序是被允许接入的

2、我的程序匹配到一条接入控制规则的IP，这条规则的“当前连接数”已达到“最大连接数”，可是我的程序怎么还能接入呢？

答：A.请确认接入控制的开关是打开的。

B.请确认你匹配到的这条规则的“使能状态”是“使能”。

C.请确认你的程序的连接类型就是这条规则的“控制类型”。

3、 我打开了接入控制的开关并且设置了接入控制规则，可是有个客户端IP不在接入控制的IP范围内也能接入？

答：是的，不在接入控制的IP范围内的客户端接入时不匹配任何一条控制条件，就允许它接入了。

4、 那我要实现除了我设置的这些IP可以接入外，其他IP都不能接入，该怎么办呢？

答：你可以在配置完了允许哪些客户端IP可以做多少个连接之后，最后再加上一条接入控制规则：服务器IP和客户端IP均为*，最大连接数为0


4.8 流量控制（业务控制） - KCXP操作手册

4.8 流量控制（业务控制）

在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中，用户可通过配置各种控制条件对消息进行流量控制。流量控制的条件维度包括受控时间、阀值数、阀值单位以及用户自己设定的各种KCXP、KCBP变量组成的表达式。KCXP将根据匹配的配置条件，对满足条件的消息按照配置的处理方式进行处理。

KCXP提供统一的插件接口，由KCXP按照配置加载并初始化。插件对传入的数据进行业务解析，按照配置进行判断，返回处理的动作，并更新处理时间和流量值。

KCXP启动后，用户在KCXP界面的“业务控制”标签页中看到如下显示：

图4-8-1 流量控制

【如果在该界面的左边树“插件”下无任何数据，则在KCXP目录下新建文件kcxpflowctrl.xml，并将以下内容拷贝到文件中：

<?xml version='1.0' encoding='gb2312' ?>

<kcxpflowcontrol>

<BpFlowCtrl.dll desc="处理KCBP数据的流量控制插件" state="1" clientip="*">

</BpFlowCtrl.dll>

</kcxpflowcontrol>

然后再点KCXP“流量控制”界面中的“刷新”按钮，就可以看到如上图显示了。】


4.8.1 流量控制开关的打开 - KCXP操作手册

4.8.1 流量控制开关的打开

要在KCXP中使用流量控制功能，首先要在“业务控制”标签页勾上“业务控制开关”：

图4-8-2 打开流量控制的开关


4.8.2 流量控制规则的配置 - KCXP操作手册

4.8.2 流量控制规则的配置

点击“添加”按钮，添加一条流量控制规则，在列表中将增加一行：

图4-8-3 添加一条流量控制规则

1、 在“名称”列填写该条规则的名称（如“rule1”）。

2、 在“描述”列填写对这条规则的描述（可不填，但建议还是好好填写，以方便其他人员了解该条规则到底是干什么的，如：“在9:00:00-11:00:00和13:00:00-14:30:00时间段内，功能号不为410000或者机构代码为1234的消息，每分钟只能放1000笔，超过1000笔的消息将被废弃，并给前端返回错误”）。

3、 在“受控时间”列填写该条规则在什么时间内发挥作用。如上述“描述”中的“在9:00:00-11:00:00和13:00:00-14:30:00时间段内”，转化为受控时间是“9:00:00-11:00:00,13:00:00-14:30:00”（分隔符分别为英文的减号和逗号）。如果全天受控，则“受控时间”为“*”。

4、 在“条件”列配置具体的流量控制规则。点击该单元格，会有“编辑”按钮

点击“编辑”按钮，将进入“编辑规则”页面进行流量控制规则的编辑：

图4-8-4 流量控制规则的编辑

如上述“描述”中的“功能号不为410000或者机构代码为1234的消息”【先双击“KCBP”列表中的“功能号”，再单击“运算符号”中的“!=”按钮，再在“规则表达式”框中手动填写“410000”，再单击“运算符号”中的“||”按钮，再双击“业务报文”列表中的“win客户代码”（若是linux客户端，则选择“U客户代码”），再单击“运算符号”中的“==”按钮，再在“规则表达式”框中手动填写“1234”】，转化为规则表达式是：@headdata.funcid!=410000||@busidata.custid==1234

注意：对于业务报文中的字段，若消息送了该字段，但是未送值（或者说送的值为空），那么在规则表达式中可判断该字段的strlen是否为0；若消息未送该字段，对于build 20141229之前的版本，当该字段值为0，对于build 20141229之后（含）的版本，当该字段值为#NULL# 。如判断业务报文中的fundid的值是否为12或34，或者是送了空，或者是没送，build 20141229之前的版本这么配置规则表达式：IsIn(@busidata.fundid,12,34,0) || strlen(@busidata.fundid)==0 ；build 20141229之后（含）的版本这么配置规则表达式：IsIn(@busidata.fundid,12,34,#NULL#) || strlen(@busidata.fundid)==0

若运算符中的字符（如=、>、|等）要做为普通字符使用，请在字符前使用\进行转换。如，判断字段a的值是否为>，配置规则是：@a==\>

“运算符号”各函数的具体意思，可参考5.2章节。

若你需要配置的字段不在“业务字段”中，该如何配置？

方法一：在“规则表达式”框中手动填写。如你的条件为“判断业务报文中字段a的值是否为100”，则可以手动在“规则表达式”框中填写：@busidata.a==100

方法二：在KCXP目录下找到BpProtocol.xml并打开，在其busidata节点下增加你的字段并保存。在下次点击 [image] 此处的“编辑”时即时生效。

若该条规则是以某个（些）字段来分组，则可在“Group”编辑框添加分组的字段【所谓分组，解释如下：以上述这条规则为例，你若选择了按“业务报文”中的“机构代码”字段来分组，那么不同的（或是说每个）机构代码，满足了上述规则，每分钟都可以放1000笔，即：在某分钟放了1000笔满足规则、“机构代码”字段为1的消息后，并不影响再在这分钟继续放入“机构代码”为2（或是3、4、5等）、满足规则的消息】。

编辑完之后，点击“确定”按钮回到KCXP界面（“取消”按钮，放弃此次编辑）。

5、 在“阀值”列填写流量阀值，如上面一直在说的“1000”。

6、 在“单位“列选择阀值的单位 [image] 。支持自定义时间段，起始时间可以大于结束时间，表明跨天进行流控。

7、 在“报警阀值“列填写该条规则在达到多少笔后在KCMM系统中报警。若没有使用KCMM系统（或是不需要报警），则该列不需要填写。

8、 在“处理方式“列选择满足规则且在单位时间内超过阀值后，KCXP对消息的处理方式。

早于build 20140429（不含）的KCXP命令管理器（即KCXP界面）版本如右显示：

ü 返回错误应答包：截取客户端的请求消息，并往其应答队列中放一个业务（错误）应答，客户端可从应答队列中取出该应答。在KCXP中记拦截请求的警告日志。

ü 消息被处理,返回告警信息：客户端程序放消息成功，给其返回2402的告警。在KCXP中记警告日志。

ü 消息被废弃,返回前端错误：客户端程序放消息失败，给其返回2401的错误。在KCXP中记错误日志。

ü 消息被废弃,连接被重置：客户端程序放消息失败，给其返回2403的错误并释放其连接句柄。在KCXP中记错误日志。

build 20140429（含）至build20150414（不含）的KCXP命令管理器版本如右显示：

ü 消息被处理,返回告警信息：客户端程序放消息成功，给其返回2402的告警。在KCXP中记警告日志。

ü 消息被废弃,返回前端错误：截取客户端的请求消息，并往其应答队列中放一个业务（错误）应答，客户端可从应答队列中取出该应答。在KCXP中记拦截请求的警告日志。

build20150414及以后的版本，在流量控制中增加处理方式——排队等待：满足规则且在单位时间内超过阀值的消息，进入到排队等待状态（KCXP会记录一条警告日志），直到排队成功消息进入到队列或者未排上队给前端返回2404的错误（KCXP记录一条错误日志）。该处理方式要慎用，尤其是对从路由XP过来的消息，因请求在排队中可能导致客户端在等待时间内等不到应答，以为请求未发送出去从而重复请求。若要判断消息是否从路由XP过来的，可判断@kcxp.SrcNodeCode是否不等于本XP的节点编号（@kcxp.SrcNodeCode等于本XP的节点编号，说明消息是本XP的客户端发出来的；@kcxp.SrcNodeCode不等于本XP的节点编号，说明消息是从路由XP过来的）。

9、 在“状态“列选择该条流量控制规则的开工是否打开 [image] 。

ü 1：：开关打开，该条流量控制规则生效。

ü 0：开关关闭，该条流量控制规则不生效。

在上述的操作后，该条流量控制规则形成的效果是：

你可以继续添加新的流量控制规则，或删除、修改（需要修改哪个单元格，直接单击即可进行编辑）已配置的流量控制规则。配置完之后，点击“保存”按钮（在KCXP界面的“事件”标签页将显示 [image] ，若有错误发生会用红色显示错误），即可以按照你配置的流量控制规则对消息进行流量控制了。

点击“刷新”按钮获取KCXP当前有关流量控制的配置。若是对流量控制做了增删改之后未点击“保存”而点击了“刷新”，那么刚刚做的增删改就没有了。

说明：KCXP会对进来的消息进行流量控制规则的匹配，匹配顺序是按照KCXP的流量控制界面中流量控制规则的先后顺序。若是匹配到了某条状态为1的规则，判断是否超过了阀值，若超过了则按照该规则的处理方式进行相应处理，若没超过则放行消息；若是所有的规则都不满足，则放行消息。


4.8.3 常见问题 - KCXP操作手册

4.8.3 常见问题

1、我使用流量控制功能需要升级KCXP吗？

答：只要是kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本），就可以使用流量控制功能。

若KCXP版本低于这些版本，则需要相应升级（原来是8.x版本的KCXP就升级到kcxp_v8.8或更高版本，原来是10.x版本的KCXP就升级到kcxp_v10.11或更高版本）。

升级后，确认KCXP目录下有BpProtocol.dll、KCBPPacketOpApi.dll和ParserExpr.dll，exit文件夹中有FlowCtrl.dll和BpFlowCtrl.dll。

确认kcxp.ini中有如下配置：

[Protocol]

Protocol1=KCBP协议,0,BpProtocol.dll

2、为什么消息未按照我配置的流量控制规则进行流量限制呢？

答：请按照下列步骤一步步的进行确认

1） 按照问题1的答案确认KCXP版本和所需文件、配置。

2） 确认流量控制模块启动成功：查看KCXP日志，看KCXP启动时有关flowcontrol和加载BpFlowCtrl.dll时报了什么错。

3） 确认流量控制界面的“插件开关”是勾选中的状态。

4） 确认的你的流量控制规则配置无误。如：匹配是否等于是==，而不是=；字段名前面带了@；字段名和字段值里面没有不必要的的空格。

5） 确认你的消息匹配的那条规则的开关是开的（即状态是1）。

6） 确认你的消息的放入时间是在匹配的那条规则的“受控时间”内。

7） 确认你的消息匹配到的那条规则的当前流量已经达到了流量阀值（没超过阀值是允许消息放入的），并且这条消息与上条匹配的消息是在同一个单位时间内放入的（每个单位时间都允许放入阀值数那么多的消息）。

8） 确认你的消息是满足转发规则的！


4.9 协议管理 - KCXP操作手册

4.9 协议管理

用户将KCXP从kcxp_v8.7（或更低版本）、kcxp_v10.1（或更低版本）升级到kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）后，若保留了原来的kcxp.ini，则会缺少协议及解析插件的配置，从而使得消息转发和流量控制无法生效。这时，我们可以在kcxp.ini中手动增加协议的配置：

[Protocol]

Protocol1=KCBP协议,0,BpProtocol.dll

在kcxp_v8.8 build20141229（或更高版本）、kcxp_v10.11 build20141229（或更高版本）中，还可在KCXP界面的“协议管理”标签页实时增删改。

图4-9-1 协议管理

新增协议：点击“添加”按钮，手动输入协议名称，对应的解析插件；编码标识和状态从下拉框中选择。

再点击“保存”按钮使之生效。

删除协议：选中要删除的协议，点击“删除”按钮，再点击“保存”按钮使之生效。若是协议的状态为1，

第一次点击“删除”，会将协议状态置为0，再次点击“删除”，才会将此条协议删除。

修改协议：选中要修改的参数，输入新的参数值，再点击“保存”按钮使之生效。


4.10 日志设置 - KCXP操作手册

4.10 日志设置

在kcxp_v8.8 build20141229（或更高版本）、kcxp_v10.11 build20141229（或更高版本）中，我们除了可以在XPCC命令中进行日志设置，还可以KCXP界面的“日志设置”标签页来实现。

图4-10-1 日志设置


4.10.1 配置日志 - KCXP操作手册

4.10.1 配置日志

用来配置KCXP日志文件的基本参数。

打开KCXP界面功能栏“日志设置”—“综合”，如下图所示：

图4-10-2 日志的综合配置

日志路径：KCXP日志文件保存的路径，默认为./log，表示保存在KCXP当前目录下。也可以把日志保存到其他目录，例如：F:\work\KCXP\kcxp_run\kcxp\log，若是修改，点击“应用”按钮即可生效。

文件长度：单位为byte，表示单个文件最大长度，当超过这个字节数，则会新建日志文件。

写文件方式：分线性日志和循环日志。线性日志表示一直往下生成日志文件；循环日志表示当文件个数超过同类型文件个数时，会覆盖第一个文件内容，以此循环。

同类型文件个数：只对循环日志有用。当日志很多时，使用循环日志，可以节省磁盘空间。

文件命名方式：类型和类型+级别两种。

以类型命名，日志文件名如下：

以类型+级别命名，日志文件名如下：

内容格式：若是勾选，表示每条日志的title包含勾选项，方便查看日志具体信息。

IP地址：KCXP的IP地址；

程序名：KCXP的进程名；

进程ID：KCXP的进程ID；

线程ID：写该条日志的线程id；

事件ID：写该条日志时传入的事件id；

队列：队列日志的开关。打开后，需要参照4.10.2队列日志章节，继续配置具体队列的进出消息参数。

死信消息：死信日志的开关。打开后，表示会把死信日志写进日志文件。

消息：消息日志的开关。打开后，需要参照4.10.3消息日志章节，继续配置进出此KCXP的消息参数。

集群：集群日志的开关。打开后，表示会把集群日志写进日志文件。

通道代理：路由日志的开关。打开后，需要参照4.10.5路由日志章节，继续配置从路由KCXP进出本KCXP消息的参数。

客户端（也叫用户服务）：客户端日志的开关。打开后，需要参照4.10.4客户端日志章节，继续配置接入KCXP的客户端放取消息参数。

调试信息：调试信息日志的开关。打开后，表示会把KCXP的调试信息写进日志文件。


4.10.2 队列日志 - KCXP操作手册

4.10.2 队列日志

配置队列的日志。打开KCXP界面—日志配置—队列：

图 4-10-3 队列日志的配置

添加队列日志：点击“添加”按钮，输入要写进日志的队列名，在模式下拉框中选择Put(放消息)/Get（取消息）/Put+Get（放消息+取消息），状态为打开。再点击“应用”按钮即可生效。

例如：图4-10-3中，第一条记录表示：所有进入到req1队列的消息都会记录到日志文件里；

第二条记录表示：所有进入到ans1队列或者从ans1队列取走的消息都会记录到日志文件里；

第三条记录表示：所有从ans2队列取走的消息都会记录到日志文件里；

删除队列日志：选择要删除的队列日志，点击“删除”按钮，再点击“应用”按钮即可生效。

修改队列日志：选择要修改的队列日志参数，输入新的参数值，再点击“应用”按钮即可生效。

【注意】只有队列日志开关打开，队列日志配置才会生效。


4.10.3 消息日志 - KCXP操作手册

4.10.3 消息日志

配置消息的日志，打开KCXP界面—日志配置—消息：

图 4-10-4 消息日志的配置

添加消息日志：点击“添加”按钮，输入要写进日志的消息的源IP（*表示通配符），源KCXP（*表示通配符），目标KCXP（*表示通配符），目标队列（*表示通配符），在模式下拉框中选择Put(放消息)/Get（取消息）/Put+Get（放消息+取消息），状态为打开。再点击“应用”按钮即可生效。

例如：图4-10-4中，第一条记录表示：所有进入到该KCXP的客户端IP为192.168.10.1并且源节点为10000001，目前节点为10000002，目标队列为ans3的消息都会记录到日志文件里；

第二条记录表示：所有从该KCXP取走的源节点为10000003，并且目标队列为ans4的消息都会记录到日志文件里；

第三条记录表示：所有进入到该KCXP或者从该KCXP取走的客户端IP为192.168.10.2，并且目标节点为10000004的消息都会记录到日志文件里；

删除消息日志：选择要删除的消息日志，点击“删除”按钮，再点击“应用”按钮即可生效。

修改消息日志：选择要修改的消息日志参数，输入新的参数值，再点击“应用”按钮即可生效。

【注意】只有消息日志开关打开，消息日志配置才会生效。

在kcxp_v10.20（8.20）及以上的版本中，消息日志的规则更多丰富：

图4-10-5 10.20(8.20)及以上版本中消息日志的配置

1、 源IP：发消息客户端程序所在机器的ip地址。*表示通配符。

2、 源KCXP：消息进入的第一个KCXP的节点编号。*表示通配符。

3、 目标KCXP：消息要进入的目标KCXP的节点编号。*表示通配符。

4、 模式：

ü Receive：本xp接收到的消息

ü Send：本xp发出去的消息

ü Receive+Send：本xp接收到的消息+发出去的消息

5、 过滤条件。在某条消息日志中点击“过滤条件”列，出现“编辑”按钮

点击“编辑”按钮，进入到“编辑过滤规则”页面进行消息日志规则的编辑：

图4-10-6 消息日志过滤条件的编辑

点击“确定”按钮回到KCXP界面（“取消”按钮，放弃此次编辑）。

举例， [image] 的意思是：功能号为410501或者410502或者410511，并且报文体中包含字符串12345678或者abc

什么规则都不填，点击“确定”，“过滤条件”为*，表示通配，即所有的消息都记录。

6、 起始时间：本条消息日志规则从什么时候开始生效。

7、 时长（秒）：本条消息日志规则生效时间是多长，单位秒。-1表示永久生效。

8、 总数：要记录多少条满足本规则的消息。-1表示不限。

9、 当前数：已经记录了多少条满足本规则的消息。是一个显示的数，不可更改。

10、 输出：满足本条消息日志规则的消息，记录到哪——文件：记录到kcxp的日志文件；运维端：发送到运维终端（BXMonitor）。在kcxpmanager界面只能配置“输出”为“文件”的，“运维端”用于在运维端配置过滤抓包或消息跟踪。

11、 状态：可以选择“打开”或“关闭”本条消息日志规则。

如果“过滤条件”中配置了具体的条件（非*），那么需要在“消息过滤器”中配置解析插件，否则消息日志不生效！目前我们都是kcbp协议的包，因此配置如下：

图4-10-7 消息过滤器

如上配置后，点击“应用”实时生效。


4.10.4 客户端（用户服务器）日志 - KCXP操作手册

4.10.4 客户端（用户服务器）日志

客户端从KCXP取出或者放入KCXP的消息的日志配置。打开KCXP界面—日志配置—用户服务器：

图 4-10-8 客户端（用户服务器）日志

添加客户端日志：点击“添加”按钮，输入源IP（即：客户端IP地址，*表示通配符），源程序名（即：客户端程序名，*表示通配符），在模式下拉框中选择Put(放消息)/Get（取消息）/Put+Get（放消息+取消息），状态为打开。再点击“应用”按钮即可生效。

客户端IP地址和程序名，可以在KCXP界面—用户服务器 里查看：

图 4-10-9 用户服务器

例如：图4-10-8中，第一条记录表示：客户端IP为192.168.204.133，且应用程序为kcbpsrvdetail.exe，放入到该KCXP的消息都会记录到日志文件里。

第二条记录表示：客户端IP为192.168.204.1，且应用程序为MATLAB.exe，从该KCXP取走的消息都会记录到日志文件里。

第三条记录表示：进入到该KCXP或者从该KCXP取走，应用程序为JAVA的消息都会记录到日志文件里。

删除客户端日志：选择要删除的客户端日志，点击“删除”按钮，再点击“应用”按钮即可生效。

修改客户端日志：选择要修改的客户端日志参数，输入新的参数值，再点击“应用”按钮即可生效。

【注意】只有客户端日志开关打开，客户端日志配置才会生效。


4.10.5 通道代理（路由）日志 - KCXP操作手册

4.10.5 通道代理（路由）日志

打开KCXP界面—日志配置—通道代理：

图 4-10-10 通道代理（路由）日志

添加通道代理日志：点击“添加”按钮，输入相连KCXP节点（即路由对应的节点），在模式下拉框中选择Put(放消息)/Get（取消息）/Put+Get（放消息+取消息），状态为打开。再点击“应用”按钮即可生效。

例如：图4-10-10中，第一条记录表示：由30000003节点放入到该KCXP的消息都会记录到日志文件里。

第二条记录表示：由30000008节点放入该KCXP或者由30000008节点从该KCXP取走的消息都会记录到日志文件里。

删除通道代理日志：选择要删除的通道代理日志，点击“删除”按钮，再点击“应用”按钮即可生效。

修改通道代理日志：选择要修改的通道代理日志参数，输入新的参数值，再点击“应用”按钮即可生效。

【注意】只有通道代理日志开关打开，通道代理日志配置才会生效。


4.11 信息过滤 - KCXP操作手册

4.11 信息过滤

在kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本）中，用户可以通过信息过滤里的设置，选择性的不打印界面日志或者不写进日志文件：点击工具栏上 [image] 进行配置，含错误码过滤、日志过滤、事件显示方式。

图 4-11-1 信息过滤按钮及显示框

不写日志：勾选此选项，表示要过滤的日志既不显示在界面，也不写入日志文件；不勾选此选项，表示要过滤的日志仅不显示在界面上，依然写入日志文件。

设置：保存当前界面的“错误码过滤”和“日志过滤”。即时生效。

查询：查询KCXP当前的“错误码过滤”和“日志过滤”的设置，并显示在本对话框。

保存：保存当前界面的“事件显示方式”。即时生效。

退出：退出本对话框，效果等同于点击对话框右上角的红叉（关闭）。


4.11.1 错误码过滤 - KCXP操作手册

4.11.1 错误码过滤

根据错误码进行日志过滤。

“error list”下有错误码和对应的描述，通过“Add->”按钮将选中的错误码添加到“error filter”列表里，添加并点击“设置”之后，则在界面不会显示“error filter”中错误码的日志（若同时勾选“不写日志”，则这些错误码的日志也不会写入日志文件）。如果又想显示某（些）错误码日志，则可以通过“<-Remove”按钮将错误码从“error filter”里移出。

例如：界面过滤掉如下日志，错误码为2011

操作步骤如下：

1. 点击工具栏里 [image] 按钮

2. 在“error list”下选中“2011 消息不存在”行，点击“Add->”按钮，即可看到“2011 消息不存在”已经添加到“error filter”里

图 4-11-2 错误码2011添加到“error filter”

3. 如果也不写进日志文件，需勾选“不写日志”，如图4-11-3；如果仅仅是不显示在界面上，则不勾选

图4-11-3 勾选“不写日志”

4. 点击“设置”按钮即可生效


4.11.2 日志过滤 - KCXP操作手册

4.11.2 日志过滤

根据日志类型+日志级别进行日志过滤，勾选了的日志类型和日志级别将不会显示在界面上（若同时勾选“不写日志”，则这些日志也不会写入日志文件）。

日志类型有：system（系统日志）、run（KCXP与运维代理交互的日志）、debug（调试信息日志）、biz（业务日志）、messege（消息日志）、queue（队列日志）、deadletter（死信日志）、cluster（集群日志）、uis（用户服务器日志）、mca（通道代理日志）。

日志级别有：information（正常）、warning（警告）、error（错误）、critical error（严重错误）

图4-11-4 日志过滤配置项

* 日志过滤设置

1. 勾选日志类型

2. 勾选日志级别

勾选了日志类型，一定要勾选日志级别才会生效。

messege、queue、deadletter、cluster、uis、mca这六个日志类型，需要在相应的日志级别的开关打开情况下，设置才会生效。

3. 过滤日志不显示在界面，也不写进日志文件，需勾选“不写日志”，如图4-11-3；如果仅仅是不显示在界面上，则不勾选

4. 点击“设置”按钮即可生效

例1：界面过滤掉系统日志里的警告日志和错误日志，但写进日志文件

操作步骤如下：

1. 点击工具栏里 [image] 按钮

2. 在“日志类型”下勾选system，在“日志级别”下勾选warning和error

图4-11-5 过滤掉系统日志里的警告和错误日志配置

3. 不勾选“不写日志”

4. 点击“设置”按钮即可生效

例2：界面过滤队列日志，且不写进日志文件

操作步骤如下：

1. 点击工具栏里 [image] 按钮

2. 在“日志类型”下勾选queue，在“日志级别”下勾选information

图4-11-6 过滤掉队列日志配置

3. 勾选“不写日志”

4. 点击“设置”按钮即可生效

注意的是：

Ø 如果队列日志的开关是关闭的（可到“日志设置”标签页查看），则以上设置不生效（点击“查询”按钮或者关闭本对话框并重新打开，会发现queue并未勾选上）。

图4-11-7 队列日志的开关是关闭，点击“查询”按钮后配置失效


4.11.3 事件显示方式 - KCXP操作手册

4.11.3 事件显示方式

配置 “事件”标签页显示日志的频率，含：每秒显示多少条信息、超过停顿多少毫秒，显示队列深度

图4-11-8 事件显示方式设置

如果觉得“事件”标签页刷屏太快，可减少“每秒显示”，并增大“超过停顿”。配置完毕后，点击“保存”按钮就可生效。


4.12 SSL连接 - KCXP操作手册

4.12 SSL连接

为了保证KCXP及其客户端程序通讯的安全性，我们支持在KCXP中使用SSL认证，客户端程序必须相应的配置了SSL连接并拥有正确的证书才能连上KCXP。

注：目前只有windows KCXP有SSL连接功能。


4.12.1 KCXP端的配置 - KCXP操作手册

4.12.1 KCXP端的配置

首先，要保证KCXP目录下含有以下文件（若没有，需向金证公司索取）：libeay32.dll（64位的为libeay64.dll）、SSLeay32.dll（64位的为SSLeay64.dll）、kcxproot.pem、server.pem。

然后，在kcxp.ini的[SSL]项下要这样配置：NetAddr2=YES,kcxproot.pem, server.pem, 123456, ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH, YES, NO

如果kcxp.ini的[Node]项还有其他NetAddr（假设为NetAddr4）用于客户端连接（有关kcxp.ini配置的介绍可参考4.1章节），并且需要对该NetAddr也使用SSL，则在[SSL]项下再加上：NetAddr4=YES,kcxproot.pem, server.pem, 123456, ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH, YES, NO


4.12.2 客户端的配置 - KCXP操作手册

4.12.2 客户端的配置

如果KCXP如4.11.1章节配置了SSL，那么客户端程序要连接该KCXP，也必须做SSL配置，否则连接不上KCXP。

首先，要保证客户端运行路径下含有以下文件（若没有，需向金证公司索取）：libeay32.dll（64位的为libeay64.dll）、SSLeay32.dll（64位的为SSLeay3264.dll）、kcxproot.pem、client.pem。

然后，根据客户端调用连接函数的不同来对客户端做不同设置：

ü 如果客户端调用kcxpapi的KCXP_Connect接口连接KCXP，则第七个参数设为字符串” YES, kcxproot.pem, client.pem, client, ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH, YES, YES”

ü 如果客户端调用kcxpapi的其他接口连接KCXP，则在其kcxpapi.ini的[QMgr]项下这样配置：SSL=YES, kcxproot.pem, client.pem, client, ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH, YES, YES

ü 如果客户端调用kcbpcli的接口连接KCXP，那么按照其编程说明，把” YES, kcxproot.pem, client.pem, client, ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH, YES, YES”这串字符串送入


4.13 进程间通讯的配置 - KCXP操作手册

4.13 进程间通讯的配置

对于KCXP_R版本和kcxp_v10.20(8.20)及以上版本，当客户端程序和KCX放在同一台机器的时候，我们可以使用进程间通讯的方式来提高交互速度。

要使用进程间通讯方式，客户端程序只需使用R版本或15.20160909及以上版本的kcxpapi.dll，无需其他特殊配置。

KCXP需要在kcxp.ini中打开进程间通讯的开关才能跟客户端进行进程间通讯，否则客户端即使使用满足条件的kcxpapi.dll，它们之间依然是用TCP在进行通讯。KCXP端配置使用进程间通讯的方法和步骤如下：

ü 第一步：查看kcxp.ini中是否存在[LocalCommu]项。若存在，跳至第二步；若不存在，则手动增加。

ü 第二步：在[LocalCommu]下面一行填写：Enable=1

ü 第三步：保存kcxp.ini，（重新）启动KCXP。

Enable=0，或是不配置，均表示该KCXP不使用进程间通讯的功能。

使用进程间通讯方式连进来的客户端在KCXP界面的“用户服务器”标签页如下显示：


4.14 KCXP保活机制的配置 - KCXP操作手册

4.14 KCXP保活机制的配置

在实际生产环境中，某（些）客户端跟KCXP的连接可能会因为种种的网络原因而出现客户端的退出（断开连接）无法被KCXP捕捉到，从而使得客户端程序明明已经退出了，而在KCXP界面的“应用服务器”标签页的“客户端连接列表”下相应的连接却还在。而有些机器的第三方程序（如防火墙）设置了把多久没有数据流通的socket关掉，从而使得长时间未有请求的客户端再次请求会得到2054的错误。为了解决这些问题，可打开KCXP端的保活机制，方法如下：在kcxp.ini的[Keeplive]项（若没有，添加）下增加NetAddr2=6,2 。效果如下：

[Keeplive]

NetAddr2=6,2

该处6和2均可由用户自己填写，6,2的意思是：某根socket若无数据流通，TCP保活机制会每6秒发一个心跳包。如果某个心跳包发送失败，再每2秒发一个，连发5次直至某次连通（说明socket正常）或5次都失败（说明socket真的断开了）。

若该KCXP不（仅仅）是NetAddr2用于客户端接入，可在此处填写相应的NetAddr几=6,2 。关于每个NetAddr分别用于什么作用，可参考4.1章节——“KCXP配置介绍”。


第五部分 使用技巧 - KCXP操作手册

第五部分 使用技巧


5.1 KCXP中的限制 - KCXP操作手册

5.1 KCXP中的限制

对于KCXP中常用的配置是有些限制的，请参考表5-1-1（该表中出现的可见字符包含：数字、字母、英文标点符号）。

名称 | 限制数 | 说明
节点编号 | 8个字符 | 1、 使用可见字符，大小写敏感 2、 同一个系统内的KCXP的节点编号不能一样
队列管理器名 | 不超过20个字符 | 1、 使用可见字符，大小写敏感 2、 同一个系统内的KCXP的队列管理器名不能一样
节点名称 | 不超过32个字符 | 无特殊意义，一般配成与队列管理器名一样
集群ID | 5个字符 | 1、 前4位，使用可见字符，大小写敏感；第5位只能是以下16个字符：0至9，A至F 2、 若不使用集群，配成00000；若使用集群，前4位不要配0000 3、 同一个集群内的KCXP集群ID前4位要一样，第五位不能一样；同一个系统内不同集群的KCXP集群ID前4位不能一样
一个集群内KCXP的个数 | 16 |
一个KCXP允许客户端（含KCBP）的连接数 | 8192 | 1、 KCXP的在线连接数达到8192后，再有客户端连接该KCXP会得到2054的错误，并且KCXP报错“No free Conn Slot”。 2、 对客户端个数及单个客户端的连接数没有另外限制
应用队列的队列名 | 不超过32个字符 | 1、使用可见字符，大小写敏感。但是不要使用:和|
应用队列的个数 | 无限制 | 1、 KCXP所有队列（含应用队列、传输队列、系统队列）的个数限制为1024（8.8及以上版本、10.11及以上版本限制为2048）。使用xpcc的dispqd –a命令可以查看当前队列的使用情况 2、 对应用队列的个数没有另外限制
远程队列（远程映射）的名称 | 不超过32个字符 | 1、使用可见字符，大小写敏感
远程队列（远程映射）的个数 | 512 |
路由节点的个数 | 512 | 1、 此处路由节点含连通节点和未连通节点 2、 大版本号不同的KCXP建路由不通，即8.x和10.y的KCXP不能建路由
接入控制、流量控制、消息路由 |  | 1、 这三个配置在8.8及以上版本、10.11及以上版本中才有 2、 对单条策略长度以及策略的条数无限制，但是对于它们的配置文件（分别为kcxpconnctrl.xml、kcxpflowctrl.xml、kcxpexit.xml）的大小限制为8k，超过后将无法在KCXP界面实时修改。对于build20150421及以后的版本无此限制

表5-1-1 KCXP中的限制


5.2 规则中的函数说明 - KCXP操作手册

5.2 规则中的函数说明

对于kcxp_v8.8（或更高版本）、kcxp_v10.11（或更高版本），在其消息路由模块和业务控制（流量控制）模块，在配置转发规则或流量控制规则时，都需要配置规则。从KCXP界面点击进入到规则配置界面（消息路由模块和业务控制模块如何进入到规则配置，请看4.5.4章节和4.8.2章节），显示如下：

图5-2-1 编辑规则

==：判断是否相等。例：ab==ab，结果为真（1）；ab==abc，结果为假（0）。

!=：判断是否不相等。例：ab!=ab，结果为假（0）；ab!=abc，结果为真（1）。

>：判断左边的值是否大于右边的值，字母就比较阿斯克码。例：1>2，结果为假（0）；abc>aBa，结果为真（1）。

>=：判断左边的值是否不小于右边的值，字母就比较阿斯克码。例：2>=2，结果为真（1）；a>=c，结果为假（0）。

<：判断左边的值是否小于右边的值，字母就比较阿斯克码。例：1<2，结果为真（1）；abc<aBa，结果为假（0）。

<=：判断左边的值是否不大于右边的值，字母就比较阿斯克码。例：2<=2，结果为真（1）；a<=c，结果为真（1）。

&&：并且，判断左右两边是否都真，真&&真 = 真，真&&假 = 假&&真 = 假&&假 = 假。例：(a > b) && (1==1)，结果为假（0）。

||：或，判断左右两边是否有一个真，假||假 = 假，真||真 = 真||假 = 假||真 = 真。例：((a > b) && (1==1))||(a>A)，结果为真（1）。

!：判断其后面的值是否为假。例：!(2==2)，结果为假（0）；!(a>b) ，结果为真（1）。

&：二进制与。

|：二进制或。

(：左括号。

)：右括号。

atoi：把字符串转换为整数。跳过字符串前面的空格，直到遇上数字或者正负号则开始做转换，而再遇到非数字字符时(包括结束符 \0)停止转换，并将结果返回。例：atoi(ab)，结果为0；atoi(12A2)，结果为12；atoi(-3.5a)，结果为-3。

atof：把字符串转换为浮点数。跳过字符串前面的空格，直到遇上数字或者正负号则开始做转换，而再遇到非数字字符时(包括结束符 \0)停止转换，并将结果返回。字符串中可包含小数点或E(e)来表示指数部分。例：atof(ab)，结果为0；atof(12A2)，结果为12；atof(-3.5a)，结果为-3.5；atof(123e-2e)，结果为123e-2。

strcmp：带两个参数，比较这两个参数是否相同，相同返回0，否则返回非0。例：strcmp(a1b,a1b)，结果为0；strcmp(a,A)==0，结果为假（0）。

strncmp：带三个参数，比较前两个参数的前n位是否相同（n为第三个参数的值），相同返回0，否则返回非0。例：strncmp(abcd,abdd,2)，结果为0； strncmp(abcd,abdd,2)，结果为非0。

strlen：带一个参数，计算该参数的长度（含字符的个数）。例：strlen(abc12)，结果为5。

strcat：带两个参数，将第二个参数添加到第一个参数结尾处，组成一个新的字符串。例：strcat(ab,12a)，结果为ab12a。

isin：KCXP自定义的函数IsIn，至少带两个参数，其作用是判断第一个参数是否为后面枚举的某个值。例：IsIn(5,1,2,5,9)，结果为真（1）；IsIn(a,abc,d) ，结果为假（0）。

getval：KCXP自定义的函数getvalue，带三个参数，其作用是“以第二个参数为分隔符将第一个参数分割，然后取出其中第n（n为第三个参数）个的值”。例：getvalue(a#bc#e,#,2)，结果为bc。


5.2.1 用户自定义函数 - KCXP操作手册

5.2.1 用户自定义函数

对于kcxp_v10.11(8.8) build20141229及以后的版本，还支持用户自定义函数。首先，用户编写动态库，在其中写好自定义函数的实现，将该动态库放在KCXP目录下，然后在KCXP目录下的kcxp_ext_functions.xml（若没有，新建）中配置这个动态库的名称、函数的名称以及函数需要的参数，在KCXP启动后，就可以在规则中配置使用该函数了。kcxp_ext_functions.xml模板如下：

<?xml version="1.0" encoding="gb2312"?>

<kcxp_functions>

<function name="函数名" path="动态库名" entrypoint="动态库的入口函数名">

<return name="返回值的名字，主要用于理解这个函数" type="int or string"/>

<argument>

<argv name="参数1的名字，主要用于理解这个参数" type="int or string"/>

<argv name="参数2的名字，主要用于理解这个参数" type="int or string"/>

</argument>

</function>

</kcxp_functions>

增加一个自定义函数，在文件中增加一个function节点即可。每个function节点下的argument中有几个argv节点，按照该函数有几个参数来填写。

在发布windows版kcxp_v10.15(8.15) build20150924时，发布了一个支持lua脚本的自定义函数KLuaMain，该函数支持的是用户自己写lua脚本，KCXP调用lua脚本中的函数，得到返回结果。要使用该功能，在kcxp_ext_functions.xml中增加一个function节点，如下配置（发布时已配置好了）：

<function name="KLuaMain" path="KLuaFunction.dll" entrypoint="KLuaMain">

<return name="result" type="string"/>

<argument>

<argv name="lua脚本名" type="string"/>

<argv name="lua脚本中函数名" type="string"/>

<argv name="lua函数参数" type="string"/>

</argument>

</function>

从该function节点的配置可以看出，自定义函数KLuaMain需要带三个参数，第一个参数是lua脚本的名字，第二个参数是lua脚本中的函数的名称，第三个参数是要做为参数送入到lua函数中的。

例，我现在写一个lua脚本test.lua，放在KCXP目录下，其内容如下：

function testLuaFun(x)

if string.find(x,"abc") then

return 123

else

return 321

end

end

那么，KLuaMain(test.lua,testLuaFun,1abc)，结果为123；KLuaMain(test.lua,testLuaFun,a)，结果为321。

图5-2-1的“运算符号”中空白的那些按钮（对于没有空白按钮的KCXP界面，可以跳过本段），是为了在添加了自定义函数后，编辑规则使用这些函数时不用每次都手动输入。假设我已经按上述描述正确添加了某个自定义函数名称为MyFun，那么我可以在 “运算符号”中右键单击某个空白按钮，按钮将变成编辑框：

输入MyFun：

要在规则表达式中使用该函数时，左键单击该按钮即可：


第六部分 附录 - KCXP操作手册

第六部分 附录


常见问题解答 - KCXP操作手册

常见问题解答

对用户使用容易发生的问题或是用户常犯的错误给出解决方法。


联机帮助使用方法 - KCXP操作手册

联机帮助使用方法

介绍产品附带的联机帮助系统的使用方法。


其他 - KCXP操作手册

其他

介绍其它有关的事项。