[
]
宙飒天下网 全局识别器
在请求报文解析后便开始进行解析,根据配置的识别项,通过识别器类型进行识别,识别后,将识别出的值作为上下文信息,放入message中 (message作为上下文,携带着请求的一切信息,在请求链中流动的实际就是message),通过在message的get操作可以获取。 使用场景: 全局识别器仅识别一次,对于整个流程中在多个插件中使用到的值,应该使用全局识别器进行识别。
本地识别器
配置到每一个处理器中,本地识别器属于懒识别类型,只有在get操作从上下文中获取不到值时,使用本地识别器进行识别,不同的本地识别器之间是隔离的,并且不会对识别值进行存储。
使用场景: 在当前位置使用的值(例如只在当前handler中使用),并且不一定在每次请求中都需要识别的值,适合使用本地识别器。
识别器中type表示识别器类型,可自定义扩展。
id为识别器标识,同一个handler中不能重复。
目前默认提供的识别器类型有:
名称 | 说明 |
---|---|
all | 全局识别器,返回一个固定的常量 |
router | 返回路由的channel id |
date | 返回时间格式,如:${yyyy-MM-dd} |
header | 通过http header中取值 |
ip | 获取请求者的ip及port,远端地址: ${ip},远端端口:${port}, 本机地址: ${localIp}, 本机端口: ${localPort} |
map | 从请求头或者请求体中解析参数, 支持多层级解析, 如${root.MsgHeader.MsgTp}, 对多级格式报文的识别配置方式可参考参数映射插件部分 |
constant | 常量识别,直接将表达式值返回,${abc},返回abc |
localContext | 从GatewayMessage上下文中取 |
uuid | 生成uuid随机数,${uuid} |
random | 生产随机数,给定一个bound范围,如${100},生成100内的随机数,${1000},生成1000内的随机数 |
currentTime | 生成一个系统时间戳,${currentTime},调用System.currentTimeMillis() |
url | 获取请求者访问的url信息,支持字段有:“protocol”,“port”,“path”,如${port},${path}, 其中path可支持数组选择,如:http://localhost/pages/editpage.action?pageId=91882673&a=aa ${path},返回:pages/editpage.action?pageId=91882673&a=aa 或者范围选择,默认使用分隔符/进行分割,可进行自定义,如: ${path[1]}=editpage.action?pageId=91882673&a=aa, ${path(/,?,&)[1]}=editpage.action, ${path(/,?,&)[2]}=pageId=91882673, ${path(/,?,&,=)[3]}=91882673, 范围选择: ${path(/,?,&)[1..3]} editpage.action/pageId=91882673/a=aa,指定范围 ${path(/,?,&)[..2]} pages/editpage.action/pageId=91882673,指定结束位置 ${path(/,?,&)[2..]} pageId=91882673/a=aa,指定开始位置 |
如下为配置全局识别器示例:
recognizer: available: true values: - id: recognizer1 keyMap: {timestamp: '${timestamp}', aaa: '${aaa}', nonce: '${nonce}', signature: '${signature}', bbb: '${bbb}'} type: map - id: recognizer2 keyMap: {host: '${host}', path: '${path}'} type: url - id: recognizer4 keyMap: {port: '${port}', ip: '${ip}'} type: ip - id: ioprecognizer keyMap: {host: '${host}', iopName: '${path[0]}', projectName: '${path[1]}', protocolName: '${path[2]}',pathService: '${path[2..]}'} type: url - id: epcc_from_wlink_recognizer matcher: '${pathNo}->1285' keyMap: MsgTp: '${root.MsgHeader.MsgTp}' TrxCtgy: '${root.MsgBody.TrxInf.TrxCtgy}' RPFlg: '${root.MsgBody.RPFlg}' Is_Success_Return: '0' type: map
如下为在handler中配置本地识别器:
inbound_channel: values: #1、json渠道 - channelType: inbound protocolType: http available: true inMessagePool: {poolMode: SHARE, corePoolSize: 10, maximumPoolSize: 50, keepAliveTime: 60, available: true} failOverRetryInterval: 20000 id: testJson localRecognizers: - id: a type: map keyMap: gateway_http_request_contentType: json matcher: '${gateway_http_uri} -> *login*' - id: b type: map keyMap: gateway_http_request_contentType: http-transparent matcher: '${gateway_http_uri} -> *transparent*' values: - {port: 9000, id: testJson, weight: 1, persistent: true, started: true, type: netty, protocolType: http, contentType: json, contentRecognition: default, forceCloseConnection: true, inMessageInfoLog: true, contentType: 'json, http-transparent'} persistent: true name: 总行接入渠道 started: true outMessagePool: {poolMode: SHARE, corePoolSize: 10, maximumPoolSize: 50, keepAliveTime: 60, available: true}
内置变量
引用方式:message.getFromLocalContext(GatewayConstants.GATEWAY_DISPATCHER_CHANNEL_KEY);
因框架内部及方便使用,部分内置变量可直接使用,不需要再通过识别器进行识别,注意,比如 GATEWAY_SEND_REQUEST_TIME等, 只有在网关发送消息到服务端后才能从上下文获取.如下:
变量 | 变量名 | 描述 |
---|---|---|
LOCAL_IP | localIp | 本地ip |
LOCAL_PORT | localPort | 本地端口 |
REMOTE_IP | remoteIp | 客户端远程访问者ip |
REMOTE_PORT | remotePort | 客户端远程访问者端口 |
GATEWAY_EXCEPTION | gateway_exception | 异常 |
GATEWAY_MESSAGE_CREATE_TIME_KEY | gateway_message_create_time_key | 网关收到客户端请求时间 |
GATEWAY_RECEIVE_REQUEST_TIME | gateway_receive_request_time | 同上, 网关收到客户端请求时间 |
GATEWAY_SEND_REQUEST_TIME | gateway_send_request_time | 发送消息到服务端时间 |
GATEWAY_RECEIVE_RESPONSE_TIME | gateway_receive_response_time | 从服务端接受响应时间 |
GATEWAY_SEND_RESPONSE_TIME | gateway_send_response_time | 网关响应回客户端时间 |
GATEWAY_HANDLER_START_TIME_PRE_KEY | gatewayhandler_start_time | 请求进入每个插件的时间, starttime(插件的Id), 对于异步channel此插件无效 |
GATEWAY_HANDLER_END_TIME_PRE_KEY | gatewayhandler_end_time | 请求执行完插件的时间,endtime(插件id), 对于异步channel此插件无效 |
GATEWAY_DISPATCHER_CHANNEL_KEY | gateway_dispatcher_channel | 路由渠道 |
GATEWAY_DISPATCHER_CONNECTOR_KEY | gateway_dispatcher_connector | 路由连接器 |
GATEWAY_HTTP_URI_KEY | gateway_http_uri | 只有Http请求才能获取 |
GATEWAY_HTTP_REQUEST_HEADERS_KEY | gateway_http_request_headers | 只有Http请求才能获取, 是一个http请求头对象 |
GATEWAY_REQUEST_MESSAGE_PAYLOAD | gateway_request_message_payload | http请求报文体Map格式, 一般情况下响应过程中请求报文会被覆盖, 可以通过该变量获取请求报文 |
还没有评论,来说两句吧...