JMS消息的概念解释

Wesley13
• 阅读 608

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

^@

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
RabbitMQ如何保证队列里的消息99.99%被消费?
1\.本篇概要其实,还有1种场景需要考虑:当消费者接收到消息后,还没处理完业务逻辑,消费者挂掉了,那消息也算丢失了?,比如用户下单,订单中心发送了1个消息到RabbitMQ里的队列,积分中心收到这个消息,准备给这个下单的用户增加20积分,但积分还没增加成功呢,积分中心自己挂掉了,导致数据出现问题。那么如何解
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究