请访问https://git.oschina.net/zhjh256/io-spider获取最新更新。
spider有一个配置文件spider.xml,为xml格式,spider.xml采用DTD进行管理,用于管理spider的所有特性、路由、高可用等。
配置文件支持三种不同的方式进行指定:
1、 通过环境变量指定。SPIDER_CONFIG环境变量指定spider启动文件所在的位置。
2、 通过java系统属性执行。java系统属性spider.config指定spider启动文件所在的位置。
3、 从classpath获取。该配置文件需存放在classpath*:目录下,spider中间件启动时会自动从classpath*下搜索第一个找到的spider.xml文件并将其作为spider的配置文件进行初始化,由于该配置文件通常需要被修改,所以一般不放置在jar中。
三者的优先级为先从环境变量获取,如果能获取到则使用SPIDER_CONFIG环境变量指定的启动文件。如果为空,则从java系统属性获取。如果还是获取不到,则从默认的classpath*目录下获取。如果三个地方都获取不到,则启动失败。
spider的配置文件结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<spider>
<nodeName value="client" cloud="false" role="production"
serviceCenter="localhost:7070" appVersion="" charset="UTF-8" dev="true" detectInterval="60000"/>
<plugins>
<plugin pluginId="spider.localService" serviceTimeout="60000"
zlibCompress="false" encrypt="false" anonymous="true"
serviceProxyPackage="com.ld.net.spider.demo.parallel;com.ld.net.spider.manage.api;com.ld.net.spider.demo.broadcast;com.ld.net.spider.demo.bs.wx;com.ld.net.spider.demo.pl">
<server enable="false" port="17070" reliable="false"
threadCount="200" serviceExportPackage="" />
</plugin>
<plugin pluginId="spider.channel">
<cluster clusterName="ANB" connectionSize="10">
<workNode address="localhost" port="18051" />
</cluster>
</plugin>
<plugin pluginId="spider.filter">
</plugin>
</plugins>
<routeItems consistent="true">
<routeItem serviceId="*" clusterName="ANB" />
<!-- <routeItem serviceId="*" appVersion="" subSystemId=""
systemId="" companyId="" clusterName="spider-server" /> -->
</routeItems>
</spider>
配置文件中的所有节点元素(element)名和属性名均为大小写敏感,且采用驼峰式命名,并尽可能使用英文全称。
配置文件的使用元素或者属性的规范为:如果对象是特性,则作为属性;如果对象本身是主体,则作为元素。
各节点元素(element)以及属性的含义如下(绿色标注为已实现特性):
各节点元素(element)以及属性的含义如下(绿色标注为已实现特性):
元素 |
属性(--代表元素本身) |
可选 |
默认值,含义和取值范围 |
spider |
-- |
否 |
spider配置文件根 |
nodeName |
-- |
否 |
spider节点基本信息 |
value |
否 |
Spider节点名称,相同名称的spider将自动组成集群,任意字符串,用于cloud模式 |
|
dev |
是 |
运行模式,用于控制日志输出级别。true:开发模式,将输出所有日志信息;false:生产模式,将自动禁止输出debug级别的日志。默认false。 |
|
cloud |
否 |
spider节点运行环境,true:运行于服务中心模式,将自动接收来自服务中心推送的下游节点变化,适合于大规模部署;false:运行于独立管理模式,可通过restful api管理相关节点变化。 |
|
role |
是 |
spider角色,prod/nb/np:作为生产服务器运行;sc:作为服务中心运行。默认生产服务器。除非配置为sc,否则均表示生产服务器。只不过只有该节点配置为np时,并行处理插件才会生效,具体可见并行执行插件一节。 |
|
serviceCenter |
否 |
服务中心地址,ip:port格式。 |
|
appVersion |
是 |
长度为最长为8位,建议xx.xx.xx格式,本spider节点提供的应用服务版本,用于灰度升级,任意字符串,具体参见灰度升级一节。默认””,表示非特定版本。 |
|
charset |
否 |
全局编码格式,UTF-8或GBK。建议整个环境要么UTF-8,要么GBK,尽量避免有些UTF-8,有些GBK,不然容易出错。 |
|
slowLongTime |
是 |
慢请求执行时间,执行时间超过该长度的请求会被自动写到本地慢日志。默认3000毫秒。 |
|
dumpStat |
是 |
是否启用定期dump服务性能指标到本地,true:是,每隔5分钟会自动dump一次,该参数独立于cloud参数;false:否。默认:true。 |
|
tcpdump |
是 |
是否启用动态抓包和拦截。true:是;false:否。默认false。如果多个客户端同时设置了抓相同功能号的包,则所有都会收到结果。该特性会严重影响性能,同时存在严重安全隐患,生产环境谨慎开启。 |
|
detectInterval |
是 |
心跳检测间隔,默认60000毫秒。 |
|
plugins |
-- |
否 |
spider插件列表,当前版本一共有3个插件,插件标识符不可修改,否则会导致spider启动异常 |
plugin (pluginId= spider.localService) |
-- |
否 |
spdier插件信息,不同的插件具有不同的属性,spider核心引擎插件,用于设置spider核心的基本特性 在netty的实现上,tcp队列长度直接取/proc/sys/net/core/somaxconn的值,没有提供API进行修改,故若需修改,需在OS层面修改,spider原计划支持,后来取消 |
serviceTimeout |
是 |
服务超时时间,可在service级别覆盖,默认300秒,单位毫秒,正整数 |
|
zlibCompress |
是 |
是否启用全局zlib压缩请求包,true或者false,默认false。建议局域网内不启用,非局域网内启用。 |
|
encrypt |
是 |
是否启用AES256加密请求包,true或者false,默认false |
|
serviceProxyPackage |
是 |
作为spider客户端时要调用的远程服务的包路径,以;或,分隔。只要在该参数上设置了相关路径,服务端如果在serviceExportPackage参数上设置了对应路径,本客户端就可以通过@Autowired注入方式调用远程服务端对应包含提供的服务。 为了确保远程调用的正确性,对于进行RPC调用的情况,需要确保在本节点中不包含代理类的实现,否则启动时默认情况下Spring使用类型注入时会出现多个实现的异常,否则就需要使用Qualifier或者Resource注解。 |
|
anonymous |
是 |
服务器是否允许无认证连接。true:允许;false:不允许。默认true。具体见安全一节。该参数在服务端设置,客户端根据服务端的响应报文被动执行。当节点作为客户端角色时,该参数没有作用,也即无需设置。 |
|
server |
-- |
否 |
spider运行于服务器模式时的相关信息 |
enable |
否 |
是否启用服务端,false代表不启用,仅作为客户端,true代表启用。如果为true,则port不能为空。 |
|
port |
是 |
作为服务器时的端口号,1025-63335 |
|
threadCount |
是 |
作为服务器时业务处理线程的数量,建议为cpu核心数的20-50倍之间,默认cpu数量的20倍,一般建议不要设置 |
|
serviceExportPackage |
是 |
作为服务器时自动发布的spider服务的包路径,以;或,分隔。只要服务端在该参数上设置了相关路径,客户端只要在service-proxy-package参数上设置对应路径就可以直接通过@Autowired注入方式调用本服务端包下各类提供的服务。 |
|
plugin (pluginId= spider. channel) |
-- |
否 |
spdier插件信息,不同的插件具有不同的属性,通道插件,通道下的每个cluster代表一个服务器集群,由旗下的workNode组成 |
cluster |
-- |
是 |
定义下游服务器集群 |
clusterName |
否 |
定义集群的名称,需要和下游的服务器定义的nodeName相同,一个配置文件中的各clusterName必须不同 |
|
reverseRegister |
是 |
标记本集群下的节点是否为反向注册服务器。 |
|
workNode |
-- |
是 |
定义下游服务器集群中的成员节点。一个cluster范围内的workNode必须address+port唯一。 |
address |
否 |
成员节点的ip地址 |
|
port |
否 |
成员节点的端口号,对应于远程节点spider.xml中plugin pluginId="spider.localService"->server定义的端口。 |
|
plugin (pluginId= spider. filter) |
filter |
是 |
过滤器插件,每个filter代表一个过滤器实例。具体参见《1.3 流水线插件》。 |
routeItems |
-- |
否 |
定义路由表的信息。路由用来配置将不同的服务请求转发到相应的spider服务器。 路由条目从上往下解析,当上面和下面的路由配置冲突时,使用上面的路由条目。 |
consistent |
是 |
是否启用一致性路由策略。true:启用,此时spider运行时会根据功能号>版本号>机构号>子系统号>系统号(产品系统号)的规则,对路由表进行排序,此时无论路由条目的顺序如何,最终的路由目标是一致的;false:不启用,此时spider根据定义的路由条目顺序进行匹配,不同的路由条目顺序可能导致不同的路由结果。默认:false。建议启用。 |
|
routeItem |
-- |
否 |
定义路由条目,路由条目可以使用多个维度进行匹配以便灵活满足各种企业系统业务场景,目前支持根据功能号、版本号、子系统号、系统号、机构号五个维度进行组合,其中优先级从高到底为:功能号>版本号>机构号>子系统号>系统号(产品系统号)。 五个维度中,功能号、子系统号为静态属性,必须编译期确定(一般来说,这两者选一即可)。版本号、机构号、系统号(产品系统号)为运行时属性,可运行时设置,主要适用于多租户和灰度升级的场景。 其中功能号必须定义,如果匹配全部,则使用*即可,功能号与各维度均为and关系;其他均可选。没有定义代表匹配所有,即*。 至少需要定义一个指向本地处理插件的条目,最简单为<routeItem serviceId=”*” clusterName=”spider.localService” /> 多个路由条目的顺序会影响最后的路由结果,如下所示: <routeItem serviceId=”11*” appVersion=”1.0.2” clusterName=”BSNP-C00001v2” /> <routeItem serviceId=”11*;21*” companyId=”C00001” clusterName=”BSNP-C00001” /> 在上述的条目中,如果某1.0.2版本C00001机构的11xxxxxx功能到本节点,会被转发给BSNP-C00001v2;如果上述路由条目顺序反一下,则会转发给BSNP-C00001。 |
serviceId |
否 |
8位ASCII字符,定义本路由条目适配的功能号,功能号支持通配符格式,*代表匹配全部功能,?代表匹配一个可见字符。功能号之间可以用;或,分隔。 |
|
appVersion |
是 |
定义本路由条目匹配的应用版本号,不支持通配,多个应用版本号之间可通过;或,分隔。 |
|
subSystemId |
是 |
定义本路由条目匹配的子系统号,不支持通配,多个子系统号之间可通过;或,分隔。 |
|
systemId |
是 |
定义本路由条目匹配的系统号,不支持通配,多个系统号之间可通过;或,分隔。 |
|
companyId |
是 |
定义本路由条目匹配的机构号,不支持通配,多个机构号之间可通过;或,分隔。 |
|
clusterName |
否 |
定义本条目中的功能将转发到的spider远程服务器。应该确保每条独立的路由均有不同的clusterName,如果多条路由具有相同的目标节点,应该在相应属性上使用;分隔的方式进行合并。 |