消息由消息使用方在连接和会话的上下文中接收。客户端使用消息使用方对象 (MessageConsumer) 接收指定物理目的地中的消息,在 API 中表示为目的地对象。
消息如何由代理传送给使用方受三方面因素的影响:
使用是同步的还是异步的
是否使用选择器来过滤传入消息
如果使用主题目的地中的消息,则订户是否为长期订户也会有影响。
影响消息传送和客户端设计的另一主要因素是使用方需要的可靠度。请参见可靠消息传送。
同步使用表示使用方明确要求传送消息并使用该消息。
根据请求消息时使用的方法,同步使用方可选择等待(无限期)消息到达,等待指定的时间或者在不存在可供使用的消息时立即返回。(“可供使用”是指对象立即可供客户端使用。成功发送但代理尚未处理完成的消息还不能使用。)
异步使用是指,自动将消息传送给为使用方注册的消息侦听器对象 (MessageListener)。当会话线程调用消息侦听器对象的 onMessage() 方法时,客户端将使用该消息。
消息使用方可以使用消息选择器,使消息服务只传送属性符合特定选择标准的消息。该标准在创建使用方时指定。
选择器使用类似 SQL 的语法与消息属性匹配。例如,
color = ”red’ size > 10
Java 客户端还可以在浏览队列时指定选择器,这样就可以查看哪些选定消息正在等待使用。
可以使用会话对象创建主题的长期订户。即使订户变为非活动状态,代理也会为这些类型的订户保留消息。
由于代理必须维护订户的状态并在订户被重新激活后恢复消息传送,因此,代理必须能够在给定订户的订阅期内识别该订户。订户标识是根据创建该订户的连接的 ClientID 属性以及创建订户时指定的订户名构造的。