JMS消息的概念解释-stomp

原创
2014/12/27 17:26
阅读数 134

1、默认生产者消息是持久的:会存数据库

--消费者的持久:createDurableSubscriber是指消费者能收到所有它订阅时间点之后的消息,即使消

费者注册后关闭,当它重启就能收到注册时间点之后所有的消息;即当此消费用户ID(AAA)在producer发

送之前就已经注册,那么此id能收到producer发送的所有消息,如果是在producer之后注册的那么只能

收到此时间点后的消息;

--注意:topic和queue消费者收到消息后有两种情况,设置为Session.CLIENT_ACKNOWLEDGE,必须代码显示调用

acknowledge()方法,那么重启后不会收到消息,否则客户端不确认则每次重启都会收到

--消费者的非持久。createConsumer只能接受到启动时间点之后,生产者producer发送的消息

--另外topic的生产者还有个特别的参数retain:true,设置为true时,无论何时订阅者启动,都能收到

对应主题destination的最后一条信息;但是如果broker重启了,则者最后一条又是丢弃的,估计能使用

的场景很少。

2、topics和queues的区别。

--topics时广播给所有已经订阅消费者,queues仅被一个消费者获取一次。但是queues如果broker未能

证实已经有订阅者消费,那么下一个订阅者继续消费-----这句话包含好几层意义:多个消息获取端不

会获得重复的信息;但是如果消息可能被消费,但是每到服务器确认,就会被2次消费,极端情况如收到

信息还没发回执到服务器就断网了;如果多个消费者同时在线消费100条信息,他们消费到的信息都是随

机的,总数不会超过100;如果没有消费者消费这条消息,这条消息一直在服务器中显示为未消费状态,除非手工删除。

--topics在broker系统里面找不到消费者就会丢弃消息。就是说只会发送给已经订阅的消费者,反之从

消费者来讲,它只消费它订阅后的生产者发送的消息吃就丢弃不代表不持久。

--queues有可靠性消息,请区别topics的持久性消息,可靠消息并不保证有订阅者接受到消息,可靠性

消息保证一定有订阅者接受消息

3、可靠性消息

--queues中producer使用receipt参数来发送消息,这个参数是id标志,当broker收到订阅者消费完毕

信息后发个回执消息给producer,包含参数receipt-id,值对应producer发送的参数receipt

SEND

destination:/queue/a

receipt:001

hello queue a

^@

接受方:

RECEIPT

receipt-id:001

^@


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部