消息服务的管理是通过配置消息管理对象的属性完成的。消息管理对象包含了管理员生成的消息配置信息,之后由消息客户端使用。
消息服务中定义了两个管理对象:
连接工厂(ConnectionFactory)。消息客户通过此对象创建与消息服务的连接;
消息目的地(Destination)。消息客户用来指定发送消息的目的地或接收消息的来源地。
由于消息服务包含两种消息模型,即Point-to-Point(PTP)和Publish-and-Subscribe(Pub/Sub)模型,Apusic应用服务器对这两种消息模型提供了完整的支持,因此,对于连接工厂而言,提供了两种可配置的连接工厂类型,面向PTP消息模型的QueueConnectionFactory和面向Pub/Sub模型的TopicConnectionFactory;对于消息目的地而言,同样提供了两种可配置的消息接收类型站,面向PTP的队列(Queue)站和面向Pub/Sub的主题(Topic)站。
通过对存在于Apusic应用服务器域主目录下config子目录中,名为jms.xml的配置文件进行编辑,实现对Apusic应用服务器消息服务的管理。在此文件中,可以对连接工厂、消息目的地和消息服务安全策略进行配置。
jms.xml文件是一个xml文件,其文档类型定义(DTD)为jms-config_1_2.dtd。
Apusic应用服务器提供了jms.xml。
在jms.xml文件中,每一个连接工厂配置信息对应一个connection-factory标记申明的xml元素,每个connection-factory元素可包含使用以下三种标记所申明的子元素:
description,可选标记,对此连接工厂的描述 ;
display-name,必须申明的标记,用于区别于其它连接工厂;
jndi-name,可选标记,通过JNDI,用于客户在服务器命名空间中查找此连接工厂。
实际应用中,当管理员为连接工厂分配JNDI名之后,消息客户即可使用JNDI在服务器的命名空间中对连接工厂进行查找并获得引用,之后通过连接工厂取得与消息服务的连接。
连接工厂的配置属性如下表:
属性 | 描述 | 值类型 | 缺省值 |
---|---|---|---|
pooled | 指定此连接工厂是否对其管理的连接使用连接池 | “True”或“False” | “False” |
secure | 指定连接工厂所提供连接的通讯方式 | “True”或“False” | “False” |
anonymous | 是否授权匿名用户访问此连接工厂 | “True”或“False” | “True” |
client-id | 由于标识连接客户状态的标识符,通常被用于Pub/Sub模型中的持久订阅(Durable subscription) | 字符串,此属性是可选的 | 无 |
default-delivery-mode | 使用由此连接工厂生成的连接发送消息时,缺省的发送方式 | “persistent”或“non-persistent” | “non-persistent” |
default-priority | 使用由此连接工厂生成的连接发送消息时,缺省的优先级 | 数字(0~9) | “4” |
default-time-to-live | 使用由此连接工厂生成的连接发送消息时,对于已发送的消息,消息系统保留此消息的缺省时间长度,单位为毫秒。 | 整型 | 0 |
min-pool-size | 此连接工厂对应的连接池中,所保持的最少连接数 | 整型 | 5 |
max-pool-size | 此连接工厂对应的连接池中,所保持的最大连接数 | 整型 | 30 |
idle-timeout | 连接等待超时时间。当连接池中的某个连接等待被使用的实际时间超过此属性数值时,连接池自动关闭此连接 | 整型,单位是秒 | 300 |
对应于PTP和Pub/Sub消息模型,Apusic应用服务器中的消息服务提供了两种消息目的地,队列(Queue)和主题(Topic)。实际应用中,管理员为消息目的地分配JNDI名,消息客户即可使用JNDI在服务器的命名空间中对消息目的地进行查找并获得引用,在通过连接工厂取得与消息服务的连接之后,消息客户即可向消息目的地同步或异步地发送或接收消息。
在jms.xml文件中,每一个消息目的地配置信息对应一个queue标记或topic标记申明的xml元素。
在jms.xml文件中,每一个队列(Queue)配置信息对应一个queue标记申明的xml元素,每个申明的queue元素可包含三种标记所申明的子元素:
description,可选标记,对此队列的描述 ;
display-name,必须申明的标记,用于区别于其它队列;
jndi-name,可选标记,通过JNDI,用于客户在服务器命名空间中查找此队列。
队列的配置属性如下表:
属性 | 描述 | 值类型 | 缺省值 |
---|---|---|---|
cache-size | 队列缓冲中保留的消息个数 | 整型 | 20 |
expiry-check-interval | 系统检测消息队列中消息是否过期的时间间隔,单位是秒 | 整型 | 60 |
JavaEE™体系中的JMS规范实际上并未包含有关安全方面的内容,因此,系统提供保证消息服务的安全和完整性的机制就极为重要。
Apusic应用服务器提供了对消息服务方面的安全管理,主要根据JavaEE™体系中的安全角色(Security Role)和消息客户的操作对消息服务进行保护。
消息服务中基于安全角色的授权方式是指,系统管理员可定义一组安全角色,每个被定义的安全角色对应于系统中的一组用户或组,然后,根据消息客户用户可对消息目的地(Destination)进行的操作(如对于队列,客户可执行发送、接收、浏览等操作)对前面定义的安全角色进行授权。
在jms.xml文件中,每一个安全角色(Security Role)配置信息对应一个security-role标记申明的xml元素,每个申明的security-role元素可包含四种标记所申明的子元素:
description,可选标记,对此安全角色的描述 ;
role-name,必须申明的标记,用于区别于其它安全角色申明;
principal或group,必须使用至少一个这两种标记申明的元素,可以是多个,用于将逻辑的安全角色对应于系统中的用户或组。
对于一个或者一组jms.xml中申明的消息目的地(Destination)和一个或者一组jms.xml中申明的安全角色,通过使用一个destination-permission标记申明的xml元素来设置这二者之间的对应关系, 每个申明的destination-permission元素可包含三种标记所申明的子元素:
description,可选标记,对此访问许可的描述 ;
role-name,必须使用至少一个这种标记申明的元素,可以是多个,用于表示此访问许可所包含的在security-role中申明的安全角色;
destination-method,必须使用至少一个这种标记申明的元素,可以是多个,用于表示此访问许可所包含的客户对消息目的地(Destination)能进行的操作。
每个申明的destination-method元素可包含四种标记所申明的子元素:
description,可选标记,对此destination-method的描述 ;
queue-name或topic-name,必须有至少一个这两种标记申明的元素,而且它的值必须是对应的jms.xml中已申明的queue或topic元素,用于说明此访问许可包含的消息目的地(Destination);
method-name,必须使用至少一个这种标记申明的元素,可以是多个,通过方法名,指定对指定队列(queue)或主题(topic)所能进行的客户操作。对于指定的队列(queue),每个method-name元素的值可以是send、receive或browse中之一;对于指定的主题(topic),每个method-name元素的值可以是publish、subscribe、subscribe-durable或unsubscribe中之一;
下面范例授权安全角色foo可以对队列bar 进行接收和浏览:
申明队列
... <queue> <queue-name>testQueue</queue-name> </queue> ...
申明安全角色foo,并对应到管理员用户
... <security-role> <role-name>foo</role-name> <principal>admin</principal> </security-role> ...
设置访问许可
... <destination-permission> <role-name>foo</role-name> <destination-method> <queue-name>testQueue</queue-name> <method-name>receive</method-name> <method-name>browse</method-name> </destination-method> </destination-permission> ...