【发布时间】:2020-03-28 20:00:50
【问题描述】:
我读到有很多方法可以处理 JMS(Java Messaging Service) 消息,MDB(Message Driven Bean) 只是其中一种。那么除了 MDB 之外,Java 中还有哪些其他可能性来编程消息消费者呢?
【问题讨论】:
标签: jakarta-ee jms message-driven-bean
我读到有很多方法可以处理 JMS(Java Messaging Service) 消息,MDB(Message Driven Bean) 只是其中一种。那么除了 MDB 之外,Java 中还有哪些其他可能性来编程消息消费者呢?
【问题讨论】:
标签: jakarta-ee jms message-driven-bean
如 JMS 2.0 规范第 8 章所述:
JMSConsumer 对象表示,并使用 JMSContext 上的几种方法之一创建。MessageConsumer 对象表示,并使用 Session 上的多种方法之一创建。QueueReceiver 对象表示,并使用 QueueSession 上的几种方法之一创建。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 生成的下一条消息。每一种消息消费者都可以使用消费者的setMessageListener() 方法注册一个实现JMS MessageListener 接口的对象。当消息到达消费者时,提供者通过调用侦听器的onMessage 方法来传递它们。
【讨论】: