前营中间件(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完成.以后有时间可能把此部分再进行完善.
以上就是配置文件的使用.我下面会再讲解客户端和服务端的开发,然后就可以写出一个简单的例子来了.
- 前营中间件(2) - 配置
- 前营中间件(3) - 组件的开发
- 前营中间件(4) - 客户端的实现
- 前营中间件(6) - 组件的接口
- mysql中间件Mycat:配置2(读写分离)
- jndi配置多种中间件
- 中间件2
- 前营中间件(5) - 异步发包和客户端的操作函数
- 开发环境—中间件配置
- 2、运行Git前的配置
- JVM优化配置及中间件配置例子
- 关于中间件2
- TAO 中间件2
- express-2-中间件
- 中间件
- 中间件
- 中间件?
- 中间件
- Setforegroundwindow 将窗口置最前
- (6K-10K外派到盛大).NET/PHP/Java/Web前端/Linux C++开发
- 云计算是什么
- 只是记录下
- 无法安装 Windows Internet Explorer 因为其他程序或更新正在等待重启您的计算机,解决方法
- 前营中间件(2) - 配置
- silverlight利用代码添加带图标的treeviewItem
- typedef和#define的用法与区别
- typedef的四个用途和两个陷阱
- Myeclipse 输入问题
- blob的插入和讀取
- 软件测试实践 之测试环境的规划与管理
- HTTP协议详解
- 摘:jsp中获取当前路径