多个提供消息服务的应用服务器可以组成一个虚拟的JMS网络,每个提供消息服务的应用服务器可被视为一个JMS网络中的节点,而节点之间的连接则通过声明消息路由提供。只要用户连接到JMS网络中任何一个节点,即可向网络中的其他任意节点发送消息。
为提供消息服务的可靠性,和JMS网络中消息的暂时存储,Apusic应用服务器使用了一个可靠的消息存储机制。
Apusic消息服务消息路由与存储配置的部分存在于域主目录下config子目录中,apusic.conf文件中的相关配置段。apusic.conf文件中可对消息服务的消息存储目录和消息路由进行配置。
Apusic应用服务器的消息存储的配置,通过编辑Apusic应用服务器域主目录下config子目录中的apusic.conf配置文件的相关配置段进行。缺省的配置段如下:
... <SERVICE CLASS="com.apusic.jms.server.FileMessageStoreProvider" > <ATTRIBUTE NAME="StoreDirectory" VALUE="store/jms"/> </SERVICE> ...
此配置段指定了消息服务的存储目录,其中,名为StoreDirectory属性的值指定了消息存储目录的路径,可使用绝对路径如:c:\message_store\或/usr/message_store来指定,亦可使用相对于域主目录的相对路径如:store/my_message_store来指定,如指定目录不存在,应用服务器将创建指定的目录。
在一个由多台提供消息服务的 Apusic 应用服务器组成的网络上,每个提供消息服务的 Apusic 应用服务器 可被视为一个网络中的节点,消息路由意味着节点之间的路径。只要用户连接到网络中任何一个节点,即可向网络中的其他任意节点发送消息,由消息服务根据消息路由提供消息在网络中的最佳传输机制。如下图所示:
消息路由图示-1
A、B、C、D、E 五个节点上都是提供消息服务的 Apusic 应用服务器 ,五个节点连通成一个网络,连接到 A 节点的客户端可以发消息到五个节点中的任意一个节点,Apusic 应用服务器会自动寻找一条最佳路径传递消息到目标节点。如从A 发消息到D,有两条连通路径:A->B->C->D 和A->E->D,其中 A->E->D 经过的节点最少,该路径为最佳路径, Apusic 应用服务器将根据此路径对消息进行传递。
消息路由图示-2
在一个 Apusic 应用服务器 JMS 网络中,如上图所示,每个节点都是一个消息路由器(Router),每个消息路由器有一个路由器名,以区别于其他的路由器。路由器名可以和主机名相同, 也可以不同。
每两个节点之间的直接路径被称为路由连接器(RoutingConnector),网络中每两个节点间的直接路径必须事先进行申明性的定义。每个路由连接器的申明都是双向的,如在A节点上申明到B的路由连接器,则说明从A节点到B节点之间是双向连通的,从A可以到达B,从B也同样能够到达A。
假设上图中的五个节点A、B、C、D、E 是某个实际网络中五个提供消息服务的 Apusic 应用服务器 ,实际网络中的主机名分别是computerA、computerB、 computerC、computerD、computerE,在由这五个节点组成的 Apusic 应用服务器 网络中,服务器配置的路由器名分别是routerA、routerB、routerC、routerD、routerE,要使这五个节点结形成类似于上图的 Apusic 应用服务器 网络,即每个节点都有一条与下一个节点双向连通的路径,最后一个节点有一条与最开始的节点双向连通的路径,形成一个闭合的环,消息客户连接到环中的任意节点,都可向其他节点发送消息。则可以选择在每个节点上都申明一个到下一个节点的连接器,由于连接器是双向连通的,所以在下一个节点不需要申明一个到上一个节点的连接器。同时在每个节点上的远程路由需要申明跟它直接相连的其它节点的路由名。如:A节点上的远程路由需要申明B、E两个节点,表示由A节点可以直接连接到B、E两个节点上,并且不需要申明其它节点,这样A就能够向所有的节点发送消息了。同时需要申明由A到B的连接器,表示A节点跟B节点有一条双向连通的路径;节点B的远程路由则需要申明A、C两个节点,同时需要申明由B到C的连接器,如此类推。
对消息服务中路由的配置是通过Apusic应用服务器域主目录中子目录config下的apusic.conf配置文件进行的。通过apusic.conf中的相关配置段可以对消息路由器和路由连接器进行管理和配置。
路由器的配置
消息路由器的配置通过在apusic.conf文件中配置消息服务的服务配置段进行,其缺省配置段如下:
... <SERVICE CLASS="com.apusic.jms.server.JMSServer"> </SERVICE> ...
通过对申明此服务的XML元素增加名为RemoteRouters的ATTRIBUTE子元素,在其值中列出相应的路由器名即可。以消息路由图示-2中的A节点为例,A节点上需要申明B、E两个节点,表示由A节点可以直接连接到B、E两个节点上,并且可以作为消息路由路径中的一个中转节点,则可以进行如下配置:
... <SERVICE CLASS="com.apusic.jms.server.JMSServer"> <ATTRIBUTE NAME="RemoteRouters" VALUE="computerB,computerE"/> </SERVICE> ...
其它B、C、D、E节点上的相关配置段如此类推进行配置。 路由器名字间使用逗号分隔,路由器名字可以是其他主机的主机名。
一般,路由器的名字默认是服务器的主机名,但是,也可以通过使用对申明此服务的XML元素增加名为RouterName的ATTRIBUTE子元素,在其值中指定自身的路由器名。 如上例中采用了主机名对路由连接器进行申明,如在五个节点上都申明了路由器名字,如A、B、C、D、E主机分别对应routerA、routerB、routerC、routerD、routerE,则上例的配置如下:
... <SERVICE CLASS="com.apusic.jms.server.JMSServer"> <ATTRIBUTE NAME="RouterName" VALUE="routerA"/> <ATTRIBUTE NAME="RemoteRouters" VALUE="routerB,routerE"/> </SERVICE> ...
其它路由器的配置依次类推。
路由连接器的配置
每个JMS网络中的消息路由器都是通过路由连接器进行连接的,每个路由器可以拥有多个路由连接器连接到其它节点。对路由连接器的配置是通过在apusic.conf配置文件中增加路由连接器服务实现的。以消息路由图示-2中的A节点为例,需要申明到节点B的路由连接器,则可在apusic.conf文件中加入如下配置段:
... <SERVICE CLASS="com.apusic.jms.routing.RoutingConnector" NAME="Connector:Name=toB"> <ATTRIBUTE NAME="RemoteHost" VALUE="computerB"/> <ATTRIBUTE NAME="RemotePort" VALUE="6888"/> </SERVICE> ...
其中computerB是B的主机名,toB是此路由连接器区别于其他路由连接器的自由定义名字,6888是默认的JMS服务端口,具体使用中,可将其更改为实际的路由连接器名、主机名与端口。
消息路由图示-2中其它节点上的路由连接器配置如此类推。