JMS的topic和queue的区别

在JMS(Java消息服务)中,Topic实现publish和subscribe语义。一条消息被publish时,它将发到所有感兴趣的订阅者,所以零到多个 subscriber(电脑词汇中解释为“用户“)将接收到消息的一个拷贝。但是在消息代理接收到消息时,只有激活订阅的subscriber能够获得消息的一个拷贝。

JMS Queue执行load balancer语义。一条消息仅能被一个consumer收到。如果在message发送的时候没有可用的consumer,那么它将被保存一直到能处理该message的consumer可用。如果一个consumer收到一条message后却不响应它,那么这条消息将被转到另一个consumer 那儿。一个Queue可以有很多consumer,并且在多个可用的consumer中负载均衡

Jms规范里的两种message传输方式[b]Topic和Queue[/b],两者的对比如下表():

[img]http://hi.csdn.net/attachment/201106/27/0_1309164727af0q.gif[/img]


确认消息的方式有如下三种:

[b]AUTO_ACKNOWLEDGE(自动通知)

CLIENT_ACKNOWLEDGE(客户端自行决定通知时机)

DUPS_OK_ACKNOWLEDGE(延时//批量通知)[/b]

如果使用的是 客户端自行决定通知时机方式,那么需要在MessageListener里显式调用message.acknowledge()来通知服务器。服务器接收到通知后采取相应的操作。

没有更多推荐了,返回首页