前营中间件(2) - 配置

来源:互联网 发布:付费问答源码 编辑:程序博客网 时间:2024/05/19 17:59

     前营中间件的配置文件采用XML格式,下面是一份完成的配置文件,我将以此文件进行讲解:

<?xml version="1.0" encoding="gb2312"?>
<Qianyin ver="0.1">
 <WorkThread used="1">
  <MessageList Discard="0" MaxCount="3096"/>
 </WorkThread>
 <Servers>
  <Server SeqNo="2" Addr="127.0.0.1" Port="8000"/>
  <!--Server SeqNo="1" Addr="127.0.0.1" Port="8001"/-->
 </Servers>
 <Listens>
  <Listen Addr="127.0.0.1" Port="8000"/>
 </Listens>
 <Routers SelfDealFirst="1">
  <!--Router SeqNo="1,2" FuncNo="1__"/-->
 </Routers>
 <Functions>
  <Function dll="PostMesasge.dll"/>
 </Functions>
 <PackFactorys>
  <!--PackFactory dll="ZDataSetPack.dll" ver="d"/-->
 </PackFactorys>
 <DBSrcs>
  <DBSrc name="SQL" DSN="LocalServer" user="testuser" password="888888" conn_count="10"/>
  <DBSrc name="SQL1" DSN="Post60" user="sa" password="111" conn_count="10"/>
 </DBSrcs>
</Qianyin>

 

 

      一,工作线程:

       <WorkThread used="1">
           <MessageList Discard="0" MaxCount="3096"/>
      </WorkThread>
      此部分配置是否使用工作线程,used为1表示使用,其它为不使用,下面MaxCount字段表示工作线程使用的队列容量,此值最小为1024,最大为8096,如果超出此范围,则取最近的有效值,Discard表示队列满了后的处理方面,1表示丢弃,0表示不丢弃.

     我们先介绍一个系统中的几类线程,以便于理解上面字段的意思,

     在我们系统中主要有几类线程:

     1,连接线程:定时连接上级服务器;

     2,监听线程:监听新的连接;

     3,数据库连接线程:检测数据连接是否断开,如果断开则进行连接;

     以上几种线程工作性质比较单一,比较简单,没有什么好讲的.

     4,接收线程:接收线程主要负责接收数据,然后进行解包,检查数据包的正确性,在中间件服务端,还需要检查会话层和业务层的信息,然后检查是否有此功能的业务处理函数,如果没有,返回错误,如果有的话,就检查处理模式是否使用工作线程,如果不使用工作线程,就由此线程进行处理,如果使用工作线程,则保存在业务消息队列中,由工作线程进行处理.

     5,工作线程:定时检查业务消息队列是否有消息,如果有消息,就进行处理.然后返回结果.

     如果used为1,表示接收线程接收到消息后,检查数据包没有问题,就把消息放入业务消息队列中,而不进行处理,再去接收新的消息,而工作线程进行数据业务请求的处理,这样可以提供系统的伸缩.

      Discard此值如果为1的话,那么业务消息队列满了后,就直接把业务消息丢弃,如果为0,那么接收线程会进行处理业务请求包.

     二,上级中间件:

     <Servers>
       <Server SeqNo="2" Addr="127.0.0.1" Port="8000"/>
     </Servers>

     配置上级中间件的地址,此中间件将会定时连接上级中间件,并把自己所能处理的功能都传给上级中间件,当上级中间件接收到这些功能的请求时,可能会把业务转发给此中间件进行处理,然后此中间件再把结果返回给上级中间件.

     同时,此中间件还需要把业务请求发送给上级中间件,这部分功能,我们会在路由信息时讲到,而SeqNo,就是为路由信息而用的.

     上级中间件可以配置多个.

     三,监听地址

     <Listens>
        <Listen Addr="127.0.0.1" Port="8000"/>
     </Listens>
     配置监听地址,下级客户端或中间件进行连接,如果连接的是中间件,则会把下级中间件所能处理的功能取出来,记录下来,当有业务请求过来时,中间件会先检查自己有没有处理此功能组件,如果没有,则检查下级中间件有没有,如果下级中间件有的话,则传给下级中间件,如果有多个下级中间件都可以处理此功能,则轮流进行传送.

     监听地址可以配置多个,但下级最多可以接收4096个连接,如果多于这个连接数,则需要多布置服务器进行解决.

     四,路由信息:

      <Routers SelfDealFirst="1">
         <!--Router SeqNo="1,2" FuncNo="1__"/-->
      </Routers>

      路由信息配置当此中间件及下级中间件都没有处理某功能的组件时,如何向上级中间件进行转发,SelfDealFirst字段目前没有用,SeqNo字段表示上级中间件的序号,对应于上级中间件的SeqNo,可以配置多个,中间以","隔开,FuncNo表示功能号,"_"为通配符,消息进行转发时,把功能号为FuncNo进行比较,如果符合,则向对应的上级中间件进行转发,如果一条路由中有多个上级中间件,且全是连接状态,则轮流转发.

      路由信息可以配置多条,系统会从上到下进行匹配,直到找到相应的为止,这样我们可以通过对某功能配置多条路由,当上面的某个中间件坏了,则下面的中间件还可以进行业务功能的处理.以实现冗余备份.

     五,业务组件:
     <Functions>
         <Function dll="PostMesasge.dll"/>
     </Functions>

     此处配置中间件所加载的组件,组件以DLL的模式存在,存放在中间件所在目录下的COM文件夹中,中间件会调用此处配置的所有DLL,取出此DLL所能处理的功能信息,保存处理此功能的函数地址.

     组件需按照规定的要求编写,否则会加载失败,或使中间件崩溃.
     六,数据库操作:

     <PackFactorys>
        <!--PackFactory dll="ZDataSetPack.dll" ver="d"/-->
     </PackFactorys>

     配置系统中数据包操作组件,可以配置多个,中间件会自动取出相应的接收,当有请求需要进行解包时,则调用相应的解包器进行解包.如果不配置,则只能以裸数据的方式进行数据的处理.

     注意每个打包器的版本(类型,限ver,以前用错了)必须不同,每个打包器都需要按照要求的模式来编写.

     七,数据源配置:

     <DBSrcs>
       <DBSrc name="SQL" DSN="LocalServer" user="testuser" password="888888" conn_count="10"/>
       <DBSrc name="SQL1" DSN="Post60" user="sa" password="111" conn_count="10"/>
     </DBSrcs>
     配置系统所要用到的数据库,此部分封装的比较简单,只支持ODBC,需要先配置ODBC数据源,然后在此处写入配置的数据源名称和密码,并配置一个名称和连接的个数.

     在组件中,对每个功能可以指定需要的数据库的名称,则处理此功能时会把此数据的操作句柄传入.中间件会定时检查各种数据的连接状态,如果出现连接异常,会自动重连.

     数据库的封装比较简单,就是实现了连接池和连接的功能,其它操作都是利用WINDOWS的API完成.以后有时间可能把此部分再进行完善.

   

    以上就是配置文件的使用.我下面会再讲解客户端和服务端的开发,然后就可以写出一个简单的例子来了.

原创粉丝点击