我已经阅读到有许多处理JMS(Java消息服务)消息的方法,MDB(消息驱动Bean)只是其中一种。那么,除了Java中的MDB以外,还有什么其他可能性可以对消息使用者进行编程?
ww1610 回答:在Java中,除了MDB以外,还有哪些其他可能性可以对消息使用者进行编程?
如JMS 2.0规范的第8章所述:
- 在简化的(即JMS 2.0)API中,使用者由
JMSConsumer
对象表示,并使用JMSContext
上的几种方法之一创建。 - 在传统的(即JMS 1.1)API中,使用者由
MessageConsumer
对象表示,并使用Session
上的几种方法之一创建。 - 在用于点对点消息传递的特定于域的API(即JMS 1.0)中,使用者由
QueueReceiver
对象表示,并使用QueueSession
上的几种方法之一创建。 li>
- 在用于发布订阅消息传递的域指定(即JMS 1.0)API中,使用者由
TopicSubscriber
对象表示,并使用TopicSession
上的几种方法之一创建。
为清楚起见,JMS规范的更高版本与早期版本向后兼容,因此,如果您使用JMS 1.1客户端实现,则可以使用1.1和1.0 API;如果您使用JMS 2.0客户端实现,则可以使用2.0 ,1.1和1.0 API。
每种类型的消息使用者都可以同步或异步接收消息。
MessageConsumer
,JMSConsumer
,QueueReceiver
和TopicSubscriber
可以使用以下方法同步接收消息:
-
Message receive()
:返回为消费者产生的下一条消息 -
Message receive(long timeout)
:返回产生的下一条消息 在指定的超时时间内到达的消费者 -
Message receiveNoWait()
:如果有立即可用的消息,则返回为cnsumer生成的下一条消息。
每种类型的消息使用者都可以使用使用者的MessageListener
方法注册一个实现JMS setMessageListener()
接口的对象。当消息到达消费者时,提供者通过调用侦听器的onMessage
方法来传递消息。