HornetQ拥有套丰富的管理接口。用户使用这些接口可以修改服务器配置、创建新的资源(如队列和 话题)、检查这些资源(如队列中有多少消息)并进行管理(从队列中删除消息)。这样用户可以 管理HornetQ。另外,客户还可以订阅管理通知。
有三种方式管理HornetQ:
使用JMX -- JMX是标准的Java应用程序管理方式。
使用核心接口 -- 管理操作通过核心消息的方法发向HornetQ服 务。
使用JMS接口 -- 管理操作通过JMS消息的方式发向HornetQ服务器。
虽然有三种方式,但它们提供相同的功能。使用JMX方法能完成的功能使用核心接口或JMS接口都可以完成。
根据不同的应用环境来选择最适当的方式。
不管使用哪种方式,管理接口都是一样的。
对于每个被管理的资源都有一个Java的接口提供可使用的操作。
HornetQ的管理接口分布在2个包中:
核心资源的管理接口在 org.hornetq.api.core.management包中。
JMS资源的管理接口在 org.hornetq.api.jms.management包中。
调用管理操作的方法由所使用是方式是JMX、核心消息还是JMS 消息来决定。
一小部分的管理接口需要一个过滤器参数来选择需要的消息。 如果要求所有的消息,传递该参数时使用 null或者一个空的字符串即可。
HornetQ定义了一套对核心资源的管理接口。关于它们的详细说明请参见相应的javadoc。 下面是对它们的概述:
队列的列表、创建、部署与删除
getQueueNames() method方法用来列出所有已经部署的队列。
在HornetQServerControl (ObjectName org.hornetq:module=Core,type=Server或资源名core.server)上有队列创建或删除的方法,它们是 createQueue()、deployQueue()和 destroyQueue()。
如果队列已经存在,那么createQueue方法调用会出错,而 deployQueue方法调用没有任何作用。
暂停与恢复队列
QueueControl可用来暂停与恢复队列。如果一个队列被暂停,它 虽然可以继续接收消息但是不传递消息;当被恢复时,队列又会开始传递消息。
远程连接的列表与关闭
listRemoteAddresses()方法可以用来列出客户端的远程地址。 还可以使用closeConnectionsForAddress()方法来关闭 与该地址相关的远程连接。
另外,使用listConnectionIDs()方法可以列出连接ID, 使用listSessions()方法可以列出与一个连接ID相关的所有 会话(session)。
事务的手动操作(heuristic operations)
当服务器由于故障而重新启动时,可能造成一些事务没有完成而需要人工干预。 listPreparedTransactions()方法可以列出所有处于 准备(prepared)状态的事务(事务是用Base64字符串的形式列出)。如果要提交或回滚, 可以使用commitPreparedTransaction()方法或 rollbackPreparedTransaction()方法。采用启发式 (heuristic)完成的事务可以用listHeuristicCommittedTransactions() 方法和listHeuristicRolledBackTransactions方法列出。
打开和重置消息计数器
消息计数器可以用enableMessageCounters()方法打开,用 disableMessageCounters()方法关闭。如果要重置消息计数器, 可以使用resetAllMessageCounters()方法和 resetAllMessageCounterHistories()方法。
获得服务器的配置和属性
HornetQServerControl提供了访问HornetQ服务器所有属性 的方法(例如getVersion()方法可以得到服务器的版本,等等)。
核心地址可以通过AddressControl类进行访问(ObjectName 是 org.hornetq:module=Core,type=Address,name="<the address name>"或者资源名 core.address.<the address name>)。
修改地址的角色和权限。
你可以使用addRole()方法或removeRole() 方法添加或删除地址的角色。用getRoles()方法可以列出一个地址的所有角色。
管理接口中的一大部分是管理核心队列的。QueueControl类定义了核心队列的管理 接口(ObjectName org.hornetq:module=Core,type=Queue,address="<绑定地址 address>",name="<队列名>" 或资源名 core.queue.<队列名>)。
绝大部分的队列管理方法需要一个消息ID参数(如删除一个消息)或一个过滤器参数(如将具有某个 属性值的所有消息设置为过期)。
消息的过期,发向死信地址及删除
expireMessages()方法可以使消息过期。如果设置了一个过期地址, 这些消息会被发到过期地址。否则这些消息会被丢弃。setExpiryAddress() 方法可以用来设置队列的过期地址。
消息可以用sendMessagesToDeadLetterAddress()方法发送到 一个死信地址。它返回发到这个死信地址的消息的数量。如果没有设置死信地址,那么消息就会从队列中 删除。用setDeadLetterAddress()方法可以设置队列的死信地址。
消息还可以从一个队列转移到另一个队列。其方法是 moveMessages()。
消息的列表与删除
用listMessages()方法可以列出一个队列中的所有消息。这个方法 返回的是一个Map的数组。每一个Map对应一个消息。
消息可以用removeMessages()方法删除。如果是使用消息ID, 返回的是一个布尔常量;如果是用过滤器,则返回的 是删除的消息数量。在使用过滤器来删除过滤的消息时,如果传入一个空字符串则表示要删除 所有的消息。
消息计数
一个队列中的消息数可以用getMessageCount()方法获得。 此外,countMessages()方法可以返回队列中与一 个过滤器匹配的消息数量。
修改消息的优先级
用changeMessagesPriority()方法可以改变消息的优先级。 该方法如果带一个消息ID参数,返回一个布尔常量;如果带一个过滤器参数,返回优先级 被更新的消息的数量。
消息计数器
用listMessageCounter()方法和 listMessageCounterHistory()方法可以列出一个队列的消息计数器。 (参见 Section 30.6, “消息计数器”)。消息计数器还可以 用resetMessageCounter()方法重置。
获得队列的属性
通过QueueControl可以获得核心队列的属性(例如用 getFilter()方法可以得到队列的 过滤器,isDurable()方法可以知道队列是否是持久的队列等等)。
暂停和恢复队列
QueueControl可用来暂停与恢复队列。如果一个队列被暂停,它 虽然可以继续接收消息但是不传递消息;当被恢复时,队列又会开始传递消息。
HornetQ允许用户启动或停止其远程资源(接收器,转发器,桥,等等)。这样可以使服务器暂停工作 而不需要完全停止服务器(比如可以临时对服务器进行一些离线操作,像对一些事务的处理)。这些资源有:
接收器
用AcceptorControl类(ObjectName org.hornetq:module=Core,type=Acceptor,name="<接收器名 >" 或资源名 core.acceptor.<地址名 >)的start()方法启动,用 stop()方法停止。接收器的参数可以通过AcceptorControl 的属性获得。(参见 Section 16.1, “接收器(Acceptor)”)。
转发器
用DivertControl(ObjectName是 org.hornetq:module=Core,type=Divert,name=<转发器名> 或资源名core.divert.<转发器>)类的 start()方法可以启动,用stop()方法可以停止。 通过DivertControl还可以获得转发器的各种属性。(参见 Chapter 35, 消息的转发(divert)与分流)。
桥
桥可以通过BridgeControl类(ObjectName org.hornetq:module=Core,type=Bridge,name="<桥的名字 >" 或资源名 core.bridge.<桥的名字 >)的start() 方法启动,用stop()方法停止。它的属性可以通过 BridgeControl的属性获得(参见 Chapter 36, 核心桥)。
广播组
广播组可以通过BroadcastGroupControl类(ObjectName org.hornetq:module=Core,type=BroadcastGroup,name="<广播组名 >" 或者资源名 core.broadcastgroup.<广播组名>)的 start()方法启动,用stop()方法停止。 它的属性也可以通过BroadcastGroupControl的属性获得(参见Section 38.2.1, “广播组”)。
发现组
发现组可以通过DiscoveryGroupControl类 (ObjectName org.hornetq:module=Core,type=DiscoveryGroup, name="<发现组名>" 或资源名core.discovery.< 发现组名>)的 start()方法启动,用stop()方法停止。 它的参数可以通过DiscoveryGroupControl的属性获得(参见 Section 38.2.2, “发现组”)。
集群连接
集群连接可以通过ClusterConnectionControl类( ObjectName org.hornetq:module=Core,type=ClusterConnection,name="<集群连接名 >" 或资源名 core.clusterconnection.<集群连接名>)的 start()方法启动,用stop()方法停止。 它的参数可以通过ClusterConnectionControl的属性来获得(参见 Section 38.3.1, “配置集群连接”)。
HornetQ定义了一套JMS管理接口来管理JMS的可管理的对象 (例如JMS队列,话题及连接工厂)。
JMSServerControl类(ObjectName org.hornetq:module=JMS,type=Server 或资源名jms.server)用来创建JMS资源(连接工厂和目标)。
列表、创建、删除连接工厂
使用getConnectionFactoryNames() 方法可以列出部署的连接工厂的 名字。
用createConnectionFactory()方法和destroyConnectionFactory()方法能创建和删除JMS连接工厂。 这些连接工厂都与JNDI绑定以便于客户端来查找。如果是在图形介面下创建连接工厂,在广本框内输入 有关的传输参数时可使用一组用逗号隔开的键-值对(例如key1=10, key2="value", key3=false)。 如果需要定义多个传输,你需要将每个传输的参数对用大括号括起来,例如{key=10}, {key=20}。 第一个key属于第一个传输配置,第二个key属于第二个传输配置。 (有关传输的各种参数参见Chapter 16, 传输层的配置)。
列表、创建与删除队列
getQueueNames()方法可以获得部署的JMS队列的名字列表。
JMS队列可以用createQueue()方法创建,用destroyQueue()方法删除。 创建的队列都绑定到JNDI以便JMS客户端可以查找。
列表、创建与删除话题(topic)
getTopicNames()方法可以获得部署的JMS话题名字。
JMS话题可以用createTopic()方法来创建,用destroyTopic()方法来删除。 创建的话题都绑定到JNDI以便客户端查找。
远程连接的列表与关闭
用listRemoteAddresses()方法可以获得JMS客户端的远程地址。 还可以用closeConnectionsForAddress()方法关闭与某个远程地址相关联的连接。
另外,listConnectionIDs()方法可以列出连接的ID, 而listSessions()方法可以列出一个给定的连接ID的所有会话(session)。
使用类(ObjectName org.hornetq:module=JMS,type=ConnectionFactory, name="<连接工厂名>"或者资源名jms.connectionfactory.< 连接工厂名>)可以管理JMS的连接工厂。
获得连接工厂的属性
ConnectionFactoryControl类可以用来获得连接工厂的属性( 例如getConsumerWindowSize()方法可以获得接收者流控制的窗口大小, isBlockOnNonDurableSend()方法可以知道从这个连接工厂创建的发送 者是否采用阻塞方式发送非持久的消息,等等)。
使用JMSQueueControl类(ObjectName org.hornetq:module=JMS, type=Queue,name="<队列名>"或资源名 jms.queue.<队列名 >可以管理JMS队列。
JMS队列的管理操作与核心队列的管理十分相似。
过期,发送到死信地址和移动消息
可以使用expireMessages()方法将队列中的消息设成过期消息。 如果配置有过期地址,消息就会被发到过期地址。过期地址可以用 setExpiryAddress()方法来设定。
使用sendMessagesToDeadLetterAddress()方法可以将消息发送到死信地址。 它返回发送到死信地址消息的数量。如果没有设定死信地址,那么消息会被丢弃。使用 setDeadLetterAddress()方法可以设定队列的死信地址。
moveMessages()方法将消息从一个队列移动到另一个队列。
列表与删除消息
使用listMessages()方法可以列出一个队列中的所有消息。它返回的是一个 Map的数组。每一个Map对应一个消息。
使用removeMessages()方法可以从队列中删除消息。如果带的参数是消息ID, 返回的是一个布尔常是;如果带的参数是一个过滤器,则返回删除的消息数。带有过滤器参数的removeMessages()方法只删除过滤器选择的消息。如果些参数是一个空字符串,那么将 删除所有的消息。
消息计数
使用getMessageCount()方法可以得到队列中的消息数。另外,方法 countMessages()可以得到队列中所有与过滤器相匹配的消息数。
修改消息的优先级
消息的优先级可以用changeMessagesPriority()方法修改。如果是带一个消 息ID参数,它返回的是一个布尔常量;如果是带一个过滤器参数,则它返回的是优先级更新了的消息数。
消息计数器
listMessageCounter()方法和listMessageCounterHistory() 方法可以用来列出队列中的所有消息计数器。(参见 Section 30.6, “消息计数器”)。
获取队列的属性
JMSQueueControl类可以用来获取JMS队列的设置参数(例如方法isTemporary() 可以判断队列是否为临时的,方法isDurable()可以判断队列是否为持久的等等)。
队列的暂停与恢复
JMSQueueControl可以暂停一个队列或恢复一个队列。 如果一个队列被暂停,它虽然可以继续接收消息但是不传递消息; 当被恢复时,队列又会开始传递消息。
JMS话题的管理是通过TopicControl类( the ObjectName org.hornetq:module=JMS,type=Topic,name="<话题名>" 或资源名 jms.topic.<话题名>)。
订阅和消息的列表
listAllSubscriptions()、listDurableSubscriptions()、 listNonDurableSubscriptions()方法可以列出话题的不同订阅。 这些方法都返回Object数组,表示订阅的细节(如订阅名, 客户ID,持久性,消息计数等)。用listMessagesForSubscription()方法可以列出一个订阅上的JMS消息。
删除订阅
持久性订阅可以使用dropDurableSubscription()方法来删除。
订阅消息计数
countMessagesForSubscription()方法可以得到一个订阅上面所持有 的消息数(还可带一个消息选择器来得出有多少消息与之匹配)。
HornetQ提供了JMX。
HornetQ通过MBean的接口暴露其JMX管理操作。它将自己的资源注册到org.hornetq域。
比如,用来管理一个名为exampleQueueJMS队列的ObjectName是:
org.hornetq:module=JMS,type=Queue,name="exampleQueue"
MBean为:
org.hornetq.api.jms.management.JMSQueueControl
MBean的ObjectName用 org.hornetq.api.core.management.ObjectNameBuilder来产生出来的。你也可以使用jconsole来查找你想要的MBean的ObjectName。
使用JMX来管理HornetQ与用JMX管理其它Java应用程序没有什么不同。你可以使用反射或者创建MBean代理的方法。
默认情况下HornetQ的JMX是打开的。将hornetq-configuration.xml文件中的jmx-management-enabled设置为false就可以关闭JMX:
<!-- false to disable JMX management for HornetQ --> <jmx-management-enabled>false</jmx-management-enabled>
如果JMX功能是打开的,则使用jconsole可以管理本地的HornetQ。
出于安全考虑,默认情况下JMX远程连接是关闭的。参见Java管理指南来配置服务器的远程管理(系统变量必须在run.sh或run.bat中定义)。
HornetQ默认使用JMX域名"org.hornetq"。如果要用一个MBeanServer管理多个HornetQ服务器,可以将每个HornetQ 服务器配置成不同的JMX域。方法就是在hornetq-configuration.xml文件中设置jmx-domain:
<!-- use a specific JMX domain for HornetQ MBeans --> <jmx-domain>my.org.hornetq</jmx-domain>
HornetQ在独立运行时使用Java虚拟机的Platform MBeanServer来注册其MBean。这在JBoss Microcontainer(微容器)的bean 文件中进行配置(参见Section 6.7, “JBoss Microcontainer Beans 文件”):
<!-- MBeanServer --> <bean name="MBeanServer" class="javax.management.MBeanServer"> <constructor factoryClass="java.lang.management.ManagementFactory" factoryMethod="getPlatformMBeanServer" /> </bean>
当与AS 5+集成运行时,它使用应用服务器自己的MBean服务,这样就可以使用它的jmx-console:
<!-- MBeanServer --> <bean name="MBeanServer" class="javax.management.MBeanServer"> <constructor factoryClass="org.jboss.mx.util.MBeanServerLocator" factoryMethod="locateJBoss" /> </bean>
参见Section 11.1.21, “JMX管理”,这个例子展示了如何使用远程JMX连接或MBean代理来管理HornetQ。
核心管理接口的调用实际上是向一个特殊的地址发送核心消息。这个特殊地址称为管理地址。
管理消息是一些定义了一些固定属性的普通核心消息。服务器通过这些属性来解释管理操作:
管理资源的名称
管理操作的名称
管理操作的参数
当一个管理消息发送到管理地址时,HornetQ服务器将从中提取出相应的信息,再调用相应的管理资源的方法,之后向 该管理消息的回答地址(reply-to address,由ClientMessageImpl.REPLYTO_HEADER_NAME 定义)发送一个管理回答。
一个ClientConsumer用来接收管理回答并提取出其中的操作的結果(如果有的话)。 考虑到可移植性,返回的結果采用的是格式的字符串,而没有采用Java的序列化技术 (org.hornetq.api.core.management.ManagementHelper可以用来将JSON字符串 转换成Java对象)。
使用以下步骤可以简化使用核心消息调用管理操作:
创建一个ClientRequestor对象,用来发送管理消息并接收回答。
创建一个ClientMessage。
使用org.hornetq.api.core.management.ManagementHelper类来帮助设置消息的管理参数。
通过ClientRequestor将消息发送
使用 org.hornetq.api.core.management.ManagementHelper类从管理操作結果中提取返回值。
例如,要得到核心队列exampleQueue中消息的数量:
ClientSession session = ... ClientRequestor requestor = new ClientRequestor(session, "jms.queue.hornetq.management"); ClientMessage message = session.createMessage(false); ManagementHelper.putAttribute(message, "core.queue.exampleQueue", "messageCount"); ClientMessage reply = requestor.request(m); int count = (Integer) ManagementHelper.getResult(reply); System.out.println("There are " + count + " messages in exampleQueue");
管理操作名及其参数必须和management包中定义的Java接口一致。
资源的名称是用org.hornetq.api.core.management.ResourceNames类来生成的, 命名都非常直观(如核心队列exampleQueue的名称为core.queue.exampleQueue, JMS Topic exampleTopic的名称为jms.topic.exampleTopic,等等)。
管理地址的配置在文件hornetq-configuration.xml中:
<management-address>jms.queue.hornetq.management</management-address>
它的默认地址是jms.queue.hornetq.management (地址前缀加上 “jms.queue”是为了方便JMS客户端也可以向它发送管理消息。
管理地址需要一个特殊的用户权限 manage来接收并处理管理消息。这个权限也在hornetq-configuration.xml文件中配置:
<!-- users with the admin role will be allowed to manage --> <!-- HornetQ using management messages --> <security-setting match="jms.queue.hornetq.management"> <permission type="manage" roles="admin" /> </security-setting>
使用JMS管理HornetQ与使用核心API管理HornetQ十分相似。
其中一个重要的不同是JMS需要一个JMS队列来发送消息(而核心接口使用的是一个地址)。
管理队列是一个特殊的队列,它需要客户端直接实例化:
Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
其余步骤完全和使用核心接口一样,只是相应的对象不同:
创建一个QueueRequestor来向管理地址发送管理消息并接收回答。
创建一个消息
使用 org.hornetq.api.jms.management.JMSManagementHelper类向消息中设置管理参数。
再使用QueueRequestor发送消息。
使用org.hornetq.api.jms.management.JMSManagementHelper来从回答中提取返回結果。
例如,要得到一个JMS队列exampleQueue中有多少消息:
Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management"); QueueSession session = ... QueueRequestor requestor = new QueueRequestor(session, managementQueue); connection.start(); Message message = session.createMessage(); JMSManagementHelper.putAttribute(message, "jms.queue.exampleQueue", "messageCount"); Message reply = requestor.request(message); int count = (Integer)JMSManagementHelper.getResult(reply); System.out.println("There are " + count + " messages in exampleQueue");
JMS管理的配置与核心接口管理的配置步骤是一样的(参见Section 30.3.1, “配置核心管理”)。
参见Section 11.1.25, “管理”,它展示了如何使用JMS消息来管理HornetQ。
HornetQ可以向listener发送各种事件的通知(如资源的创建,安全破坏等)。
有三种方式接收管理通知
JMX通知
核心消息
JMS消息
如果设置了JMX(参见Section 30.2.1, “配置JMX”),就可以通过订阅以下 两个MBean来获得通知:
org.hornetq:module=Core,type=Server 可以获得有关 核心资源的通知
org.hornetq:module=JMS,type=Server可以获得有关 JMS资源的通知
HornetQ定义了一个特殊的管理通知地址。核心队列绑定到该地址后,客户 端就可以接收以核心消息形式发送的管理信通知了。
一个核心客户端要想接收到管理通知,它必须要创建一个队列并绑定到这个管理通知地址上,然后从这个 队列接收通知。
通知消息就是普通的核心消息加上相关的属性(如通知类型,事件发生时间,资源等)。
由于是标准的核心消息,使用选择器还能够过滤掉一部分通知而只接收感兴趣的通知。
HornetQ还可以通过JMS消息的方式发送通知。
这种方式与核心消息通知相似,但是有一个重要的不同:JMS消息需要一个JMS的目标(通常是一个Topic)。
要通过一个JMS目标来接收管理通知,必须将服务器的管理通知地址修改为以jms.queue开头(如果是一个 JMS队列)或者jms.topic(如果是一个话题):
<!-- 通知将从JMS话题 "notificationsTopic"上接收 --> <management-notification-address>jms.topic.notificationsTopic</management-notification-address>
这个通知话题一旦被创建,就可以接收消息了(或者使用MessageListener):
Topic notificationsTopic = HornetQJMSClient.createTopic("notificationsTopic"); Session session = ... MessageConsumer notificationConsumer = session.createConsumer(notificationsTopic); notificationConsumer.setMessageListener(new MessageListener() { public void onMessage(Message notif) { System.out.println("------------------------"); System.out.println("Received notification:"); try { Enumeration propertyNames = notif.getPropertyNames(); while (propertyNames.hasMoreElements()) { String propertyName = (String)propertyNames.nextElement(); System.out.format(" %s: %s\n", propertyName, notif.getObjectProperty(propertyName)); } } catch (JMSException e) { } System.out.println("------------------------"); } });
参见Section 11.1.26, “管理通知”。本例采用了JMS的 MessageListener方法从HornetQ 服务器接收管理通知。
HornetQ保存着队列的历史数据,而消息计数器可以从服务器上获取这些信息。
这些信息可以显示队列的一些趋势。例如,使用管理接口你可以定期来查询一个队列 的消息数量。但这个数量不足以说明这个队列是否在工作--也许这个队列既没有发送者也没有接收者;也许这个队列 在不停地发送与接收,但是发送消息的速度与接收的速度相等。两咱情况下都会造成消息数在队列中不变,但实际队列 的状态确完全不一样。
消息计数器可以提供队列的更多的信息:
count
从服务器启动时加到队列中的总消息数。
countDelta
自上次消息计数器更新后加入到队列的消息数。
depth
队列当前的消息数。
depthDelta
自上次消息计数器更新后被加入/删除的消息总数。 例如,如果depthDelta是-10,就意谓着有10个消息从 队列中删除了(有可能是2个消息加入了但有12个消息删除了)。
lastAddTimestamp
最后一个消息加入到队列的时间戳。
udpateTimestamp
最后一次消息计数器更新的时间戳。
默认的消息计数器是关闭的,因为它需要占用一些内存。
要打开消息计数器,编辑hornetq-configuration.xml文件将其设为true:
<message-counter-enabled>true</message-counter-enabled>
消息计数器会保存队列的历史数据(默认是10天)。它以一定间隔(默认10秒一次)对每个队列进行扫描。 如果消息计数器打开,这些参数可以在hornetq-configuration.xml文件中进行调整:
<!-- keep history for a week --> <message-counter-max-day-history>7</message-counter-max-day-history> <!-- sample the queues every minute (60000ms) --> <message-counter-sample-period>60000</message-counter-sample-period>
使用管理接口可以获得消息计数器。例如要使用JMX得到一个JMS队列的消息计数器:
// retrieve a connection to HornetQ's MBeanServer MBeanServerConnection mbsc = ... JMSQueueControlMBean queueControl = (JMSQueueControl)MBeanServerInvocationHandler.newProxyInstance(mbsc, on, JMSQueueControl.class, false); // message counters are retrieved as a JSON String String counters = queueControl.listMessageCounter(); // use the MessageCounterInfo helper class to manipulate message counters more easily MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters); System.out.format("%s message(s) in the queue (since last sample: %s)\n", counter.getDepth(), counter.getDepthDelta());
参见Section 11.1.27, “消息计数器”。这个例子使用消息计数器来获得一个JMS队列的相关数据。
通过JBoss应用服务器的Admin Console可以创建与配置HornetQ的各种资源。
Admin Console允许你创建各种目标(JMS话题与队列)和JMS的连接工厂。
登录admin console后你在左边的树中会看到JMS Manager节点。所有HornetQ的资源都属于这个节点。在它的下面有JMS Queues、 Topics以及Connection Factories。分别点击它们将会看到相应的资源。下面将解释如何创建并配置它们。
要创建一个新的JMS队列,点击JMS Queues将列出当前的队列。在右边的窗口中有一个“add a new resource“按钮,点击这个按钮 并选择默认(JMS 队列)模板。点击“continue“。填入相应的队列名称与JNDI名称。其它的参数值都给出了合理的默认值,通常情况下 不用改动它们。在底部可以配置安全角色,如果你不提供将使用默认的配置。当这个队列成功创建后这些配置将会显示出来。除了队列的名字 和JNDI名字外,其它参数都可以在contiguration标签页下进行修改。下面就对它们分别解释。
点击 configuration后你将看到如下显示:
name和JNDI name是不能改变的。如果你想改变它们,必须重新创建队列。其它选项是关于地址设置与安全设置。 默认的地址设置来自于服务器的配置。如果你通过console修改或创建一个队列,那么就会增加一条新的地址设置。有关 地址设置的完整说明参见Section 25.3, “通过地址设置来配置队列属性”。
要删除一个队列,只要点击队列名称旁边的“delete“按钮即可。与此队列相关的任何地址设置或安全设置也将被删除。
配置的最后一部分是安全角色。如果在创建时没有给出则默认的安全设置将会显示在屏幕上。如果它们被修改并更新则队列的安全设置 将被更新。关于安全设置参见Chapter 31, 安全。
在console中还有一个metrics标签页,它显示了队列的各项统计数据,如消息计数,接收者计数等。
在control标签页中可以对队列进行各种操作,比如启动和停止队列,对队列中的消息进行列表,移动,变为过期,删除等。 要进行一项操作只要点击相应的按钮,然后在出现的提示中输入相应的参数,再点击ok按钮即可。操作的結果会显示在屏幕的底部。