配置文件位于项目的config文件夹下,本文对监控平台console的配置文件做一些讲解说明。

配置文件相关目录

配置文件在项目中的位置分布如下:

配置文件目录结构
配置文件目录结构

本文主要对database.xml 、 dbroute.properties 、 serviceconfig.xml 、 centerservice.xml 、 relax.xml这几个文件进行说明。

database.xml

用于连接数据库的配置文件,例1:

1
2
3
4
5
6
7
8
9
10
11
12
13
<database limit="100000" connector="com.ailk.database.dbconn.impl.RefineConnectionManager" trace="true">
<base
type="dbcp"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@10.200.130.86:1521:centest"
user="UOP_PSWD"
passwd="UOP_PSWDtest"
initialSize="1"
maxActive="10"
maxIdle="5"
maxWait="1000"
/>
</database>

配置文件说明:connector连接的RefineConnectionManager用于数据库精细化的配置,很多时候我们连接的数据库有很多,这时候我们就需要把这么多的数据库信息放到一些数据库表中,而不是在此配置文件里配置数据库。把数据库的相关连接信息放在数据库表中有利于集中管理。需要注意的是:如果connector连接了RefineConnectionManager,那么需要规定数据库名为baseRefineConnectionManager类规定的。数据库名base还有一个作用,DAO类如果定义了数据库名base,那么该类的sql语句就会在base数据库中起作用。

当然,我们也可以不用配置connector,例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<database limit="100001">
<framework <!--数据库名framework-->
type="dbcp"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@10.13.3.10:1521:hnancrm"
user="UCR_CEN1"
passwd="123"
initialSize="1"
maxActive="10"
maxIdle="5"
maxWait="1000"
/>
<cen1 <!--数据库名cen1-->
type="dbcp"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@10.13.3.10:1521:hnancrm"
user="UCR_CEN1"
passwd="123"
initialSize="1"
maxActive="10"
maxIdle="5"
maxWait="1000"
/>
</database>

是用于配置较少数据库的情况。

dbroute.properties

此文件用于group连接到指定的数据库,例如:

1
2
3
4
5
route.group.common=crm #common组路由到crm
route.group.console=crm #console组路由到crm
...
#route crm
route.crm.common=cen1 #指向crm路由的common再连接数据库cen1

serviceconfig.xml

该文件位于config/service下,需要加载进serviceconfig.xml,该文件用于配置相关服务的信息,举例代码:

1
2
3
4
5
...
<serviceconfig>
&common;
&console;
</serviceconfig>

再来看看console.xml

1
2
3
4
5
6
<service subsys="console"> <!--子系统名-->
<entity name="DB_Query_getNotifysByIns" path="com.ailk.hubble.service.db.AlarmRuleService@getNotifysByIns" /> <!--服务名&服务路径-->
<entity name="DB_Query_getNotifysByKpi" path="com.ailk.hubble.service.db.AlarmRuleService@getNotifysByKpi" />
...
</service>

代码说明:subsys="console"表示子系统名称为console,相当于group组名。里面每个entity包含一个服务名和相应的路径,@后面代表一个方法,该方法需要在该路径的类下定义。前端web和后端app通过服务名相连接。

centerservice.xml

该文件位于config/service下,文件定义了中心center里面有哪些组group,例如:

1
2
3
4
5
6
<centerservice>
<center name="base" desc="基础中心"> <!--中心名-->
<group name="common" /> <!--组名-->
<group name="console" /> <!--组名-->
</center>
</centerservice>

上面代码说明:中心center名为:base,中心base下的组名为commonconsole

relax.xml

该文件指明一个center下所包含的实例instance,例如:

1
2
3
4
5
<relax>
<center name="base">
<instance name="console-node01-srv01" listen="127.0.0.1:18080" />
</center>
</relax>

上面代码说明:中心center下包含一个实例console-node01-srv01,该实例里面会绑定一个IP地址和一个端口127.0.0.1:18080

这几个配置文件之间的关系

上面的配置文件主要涉及到中心center、实例instance、组group、服务名servicename,那么它们之间有什么关系呢?

来一张它们之间的关系图:

中心与组
中心与组
我们为什么要定义这些?

我们最终的目的是要调用服务,现在的架构是前端web和后端app分离。那么前端就要调用后端的服务。

前后端服务调用
前后端服务调用

一般来说,我们的后端服务器会部署很多instance实例,而每个实例又有自己的归属center,如果我们们要调用服务,那么该调用哪个instance上的服务?我们来梳理下这几个配置文件的调用流程:

  1. 调用目标服务,加载配置文件servicesonfig.xml,获取该文件的服务namesubsys="console",即groupconsole
  2. 加载配置文件centerservice.xml,通过group获取center="base"
  3. 加载配置文件relax.xml,通过center获取instance,这样就知道调用哪些instance啦。

配图以作说明:

配置文件关系
配置文件关系

除了上面3个配置文件,还有database.xmldbroute.properties。他们存在如下关系。

数据库配置文件
数据库配置文件

如果我们的数据足够多,会涉及到分库分表。比如存在cen1、cen2....,我们有一个common组,那么dbroute.properties会将common组指向一个库(如:cen1)。