介绍
在这一节中,我们将介绍 JMS 客户机编程的每一个重要 JMS 公用接口和它们的一些方法。一定要记住,尽管公用接口是独立于域的,但是客户机代码的行为与运行时处于操作状态的域的特定于域的行为是相匹配的。
在下一节(用公用接口进行客户机编程),我们将分析几个进行 JMS 消息处理的示例代码。
ConnectionFactory
ConnectionFactory
是一个可以从JNDI检索的受管理对象,它建立了到提供者的连接。它包含 createConnection()
方法,该方法返回了一个 Connection
对象。
Connection
Connection
封装了一个连接到提供者的活动连接。它的一些方法包括: Session
createSession(boolean, int)
:返回一个Session
对象。boolean
参数指出Session
是否被处理,int
则指出确认模式(请参阅 确认)。start()
:激活提供者发送消息。stop()
:临时停止消息的发送,可以用start()
重新开始发送。close()
:关闭到提供者的连接,并释放以它的名义占用的所有资源。
Session
是用来发送和接收消息的单线程的上下文。它的一些方法包括:
createProducer(Destination)
:返回一个MessageProducer
对象,向指定的Destination
发送消息。createConsumer(Destination)
:返回一个MessageConsumer
对象来接收来自指定Destination
的消息。commit()
:提交当前事务的所有使用的或者产生的消息。rollback()
:回滚当前事务所有使用的或者产生的消息。create<messagetype></messagetype>Message(...)
:一组返回<messagetype></messagetype>Message
的方法——例如,MapMessage
、TextMessage
等。
Destination
Destination
封装消息的目的地。它是一个从 JNDI 检索的受管理对象。
MessageProducer
MessageProducer
用于发送消息。它的一些方法包括:
send(Message)
:发送指示的Message
。setDeliveryMode(int)
:设置后续消息的发送模式,有效值为DeliveryMode.PERSISTENT
和DeliveryMode.NON_PERSISTENT
。setPriority(int)
:设置后续发送消息的优先级,有效值为 0 到 9。setTimeToLive(long)
:设置后续发送消息失效前的持续时间,以毫秒计。
MessageConsumer
MessageConsumer
被用来接收消息。它的一些方法包括:
receive()
:返回下一发到达的消息,该方法在消息可用之前会受到阻塞。receive(long)
:接收在long
毫秒内到达的下一个消息,如果在时间限制内没有消息到达,则该方法返回null
。receiveNoWait
:如果有一个消息立即可用,则接收下一个消息,如果没有消息可用,则该方法返回null
。setMessageListener(MessageListener)
:设置MessageListener
,MessageListener
对象在消息到达时接收它们,也就是异步接收(请参阅 MessageListener )。
MessageListener
MessageListener
是有一个单一方法——onMessage(Message)
——的接口,它提供了消息的异步接收和处理。
应该通过客户机类和该类使用 setMessageListener(MessageListener)
方法传递给 MessageConsumer
对象的实例来实现这个接口。在消息到达目的地时,用 onMessage(Message)
将它传递给对象。