当前位置: 首页 > news >正文

mvc5 网站开发网站整站下载器下载utf8网页乱码

mvc5 网站开发,网站整站下载器下载utf8网页乱码,廊坊seo关键字排名,郑州网站建设公司代运营目录 不同队列之间的区别 Classic经典队列 Quorum仲裁队列 Stream流式队列 如何使用不同类型的队列​ Quorum队列 Stream队列 不同队列之间的区别 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中#xff0c;拥有比较高的消息可靠性。 经典队列可以选…目录 不同队列之间的区别 Classic经典队列 Quorum仲裁队列 Stream流式队列 如何使用不同类型的队列​ Quorum队列 Stream队列 不同队列之间的区别 Classic经典队列 这是RabbitMQ最为经典的队列类型。在单机环境中拥有比较高的消息可靠性。 经典队列可以选择是否持久化(Durability)以及是否自动删除(Auto delete)两个属性。其中Durability有两个选项Durable和Transient。 Durable表示队列会将消息保存到硬盘这样消息的安全性更高。但是同时由于需要有更多的IO操作所以生产和消费消息的性能相比Transient会比较低。​ Auto delete属性如果选择为是那队列将在至少一个消费者已经连接然后所有的消费者都断开连接后删除自己。Arguments部分还有非常多的参数可以点击后面的问号逐步了解。 在RabbitMQ中经典队列是一种非常传统的队列结构。消息以FIFO先进先出的方式存入队列。消息被Consumer从队列中取出后就会从队列中删除。如果消息需要重新投递就需要再次入队。这种队列都依靠各个Broker自己进行管理在分布式场景下管理效率是不太高的。并且这种经典队列不适合积累太多的消息。如果队列中积累的消息太多了会严重影响客户端生产消息以及消费消息的性能。因此经典队列主要用在数据量比较小并且生产消息和消费消息的速度比较稳定的业务场景。比如内部系统之间的服务调用。 Quorum仲裁队列 仲裁队列是RabbitMQ从3.8.0版本引入的一个新的队列类型整个3.8.X版本也都是在围绕仲裁队列进行完善和优化。仲裁队列相比Classic经典队列在分布式环境下对消息的可靠性保障更高。官方文档中表示未来会使用Quorum仲裁队列代替传统Classic队列。 Quorum是基于Raft一致性协议实现的一种新型的分布式消息队列他实现了持久化多备份的FIFO队列主要就是针对RabbitMQ的镜像模式设计的。简单理解就是quorum队列中的消息需要有集群中多半节点同意确认后才会写入到队列中。这种队列类似于RocketMQ当中的DLedger集群。这种方式可以保证消息在集群内部不会丢失。同时Quorum是以牺牲很多高级队列特性为代价来进一步保证消息在分布式环境下的高可靠。从整体功能上来说Quorum队列是在Classic经典队列的基础上做减法因此对于RabbitMQ的长期使用者而言其实是会影响使用体验的。 与普通队列的区别 Quorum队列大部分功能都是在Classic队列基础上做减法比如Non-durable queues表示是非持久化的内存队列。Exclusivity表示独占队列即表示队列只能由声明该队列的Connection连接来进行使用包括队列创建、删除、收发消息等并且独占队列会在声明该队列的Connection断开后自动删除。 特例Poison Message handling(处理有毒的消息)。所谓毒消息是指消息一直不能被消费者正常消费(可能是由于消费者失败或者消费逻辑有问题等)就会导致消息不断的重新入队这样这些消息就成为了毒消息。这些读消息应该有保障机制进行标记并及时删除。Quorum队列会持续跟踪消息的失败投递尝试次数并记录在x-delivery-count这样一个头部参数中。然后就可以通过设置 Delivery limit参数来定制一个毒消息的删除策略。当消息的重复投递次数超过了Delivery limit参数阈值时RabbitMQ就会删除这些毒消息。当然如果配置了死信队列的话就会进入对应的死信队列。   Quorum队列更适合于长期存在的队列并且在对容错、数据安全方面有更严格要求的场景。相对于追求低延迟、非持久化等高级队列Quorum队列提供了更可靠的数据复制机制以满足对数据一致性和高可用性的要求。 不适合使用的场景 临时使用的队列         比如transient临时队列exclusive独占队列或者经常会修改和删除的队列。 对消息低延迟要求高        一致性算法会影响消息的延迟。 对数据安全性要求不高        Quorum队列需要消费者手动通知或者生产者手动确认。 队列消息积压严重       如果队列中的消息很大或者积压的消息很多就不要使用Quorum队列。Quorum队列当前会将所有消息始终保存在内存中直到达到内存使用极限。 Stream流式队列 ​       Stream队列是RabbitMQ自3.9.0版本开始引入的一种新的数据队列类型。这种队列类型的消息是持久化到磁盘并且具备分布式备份的更适合于消费者多读消息非常频繁的场景。 Stream队列的核心是以append-only只添加的日志来记录消息整体来说就是消息将以append-only的方式持久化到日志文件中然后通过调整每个消费者的消费进度offset来实现消息的多次分发。下方有几个属性也都是来定义日志文件的大小以及保存时间。如果你熟悉Kafka或者RocketMQ会对这种日志记录消息的方式非常熟悉。这种队列提供了RabbitMQ已有的其他队列类型不太好实现的四个特点 large fan-outs 大规模分发        当想要向多个订阅者发送相同的消息时以往的队列类型必须为每个消费者绑定一个专用的队列。如果消费者的数量很大这就会导致性能低下。而Stream队列允许任意数量的消费者使用同一个队列的消息从而消除绑定多个队列的需求。Replay/Time-travelling 消息回溯 ​       RabbitMQ已有的这些队列类型在消费者处理完消息后消息都会从队列中删除因此无法重新读取已经消费过的消息。而Stream队列允许用户在日志的任何一个连接点开始重新读取数据。Throughput Performance 高吞吐性能 ​        Strem队列的设计以性能为主要目标对消息传递吞吐量的提升非常明显。Large logs 大日志 ​       RabbitMQ一直以来有一个让人诟病的地方就是当队列中积累的消息过多时性能下降会非常明显。但是Stream队列的设计目标就是以最小的内存开销高效地存储大量的数据。使用Stream队列可以比较轻松的在队列中积累百万级别的消息。 整体上来说RabbitMQ的Stream队列其实有很多地方借鉴了其他MQ产品的优点在保证消息可靠性的基础上着力提高队列的消息吞吐量以及消息转发性能。因此Stream也是在视图解决一个RabbitMQ一直以来让人诟病的缺点就是当队列中积累的消息过多时性能下降会非常明显的问题。RabbitMQ以往更专注于企业级的内部使用但是从这些队列功能可以看到Rabbitmq也在向更复杂的互联网环境靠拢未来对于RabbitMQ的了解也需要随着版本推进不断更新。 如何使用不同类型的队列​ 这几种不同类型的队列虽然实现方式各有不同但是本质上都是一种存储消息的数据结构。 Quorum队列 Quorum队列与Classic队列的使用方式是差不多的。最主要的差别就是在声明队列时有点不同。如果要声明一个Quorum队列则只需要在后面的arguments中传入一个参数x-queue-type参数值设定为quorum。 MapString,Object params new HashMap(); params.put(x-queue-type,quorum); //声明Quorum队列的方式就是添加一个x-queue-type参数指定为quorum。默认是classic channel.queueDeclare(QUEUE_NAME, true, false, false, params); Quorum队列的消息是必须持久化的所以durable参数必须设定为true如果声明为false就会报错。同样exclusive参数必须设置为false。这些声明在Producer和Consumer中是要保持一致的。 Stream队列 ​        Stream队列相比于Classic队列在使用上就要稍微复杂一点。如果要声明一个Stream队列则 x-queue-type参数要设置为 stream 。 MapString,Object params new HashMap();params.put(x-queue-type,stream);params.put(x-max-length-bytes, 20_000_000_000L); // maximum stream size: 20 GBparams.put(x-stream-max-segment-size-bytes, 100_000_000); // size of segment files: 100 MBchannel.queueDeclare(QUEUE_NAME, true, false, false, params); 与Quorum队列类似 Stream队列的durable参数必须声明为trueexclusive参数必须声明为false。这其中x-max-length-bytes 表示日志文件的最大字节数。x-stream-max-segment-size-bytes 每一个日志文件的最大大小。这两个是可选参数通常为了防止stream日志无限制累计都会配合stream队列一起声明。 当要消费Stream队列时要重点注意他的三个必要的步骤 1. channel必须设置basicQos属性。 与Spring框架集成使用时channel对象可以在RabbitListener声明的消费者方法中直接引用Spring框架会进行注入。 2. 正确声明Stream队列。 在Queue对象中传入声明Stream队列所需要的参数。 3. 消费时需要指定offset。 与Spring框架集成时可以通过注入Channel对象使用原生API传入offset属性。 例如用原生API创建Stream类型的Consumer时还必须添加一个参数x-stream-offset表示从队列的哪个位置开始消费。   MapString,Object consumeParam new HashMap();consumeParam.put(x-stream-offset,last);channel.basicConsume(QUEUE_NAME, false,consumeParam, myconsumer); x-stream-offset的可选值有以下几种 first: 从日志队列中第一个可消费的消息开始消费 last: 消费消息日志中最后一个消息 next: 相当于不指定offset消费不到消息。 Offset: 一个数字型的偏移量 Timestamp:一个代表时间的Data类型变量表示从这个时间点开始消费。例如 一个小时前 Date timestamp new Date(System.currentTimeMillis() - 60 * 60 * 1_000) 由于在Consumer中必须传入x-stream-offset这个参数所以在与SpringBoot集成时stream队列目前暂时无法正常消费。在目前版本下使用RabbitMQ的SpringBoot框架集成可以正常声明Stream队列往Stream队列发送消息但是无法直接消费Stream队列了。 SpringBoot框架集成RabbitMQ后为了简化编程模型就把channelconnection等这些关键对象给隐藏了目前框架下无法直接接入这些对象的注入过程所以无法直接使用。 如果非要使用Stream队列那么有两种方式一种是使用原生API的方式在SpringBoot框架下自行封装。另一种是使用RabbitMQ的Stream 插件。在服务端通过Strem插件打开TCP连接接口并配合单独提供的Stream客户端使用。这种方式对应用端的影响太重了并且并没有提供与SpringBoot框架的集成还需要自行完善因此Stream队列使用较少。
http://www.zqtcl.cn/news/720764/

相关文章:

  • 深圳做网站哪个平台好一级消防工程师考试题型
  • 网站婚礼服务态网站建设论文网站设计有限公司是干嘛的
  • 邯郸网站建设效果好广西做网站的公司
  • 网站logo上传营销型网站制作方案
  • 小说网站静态模板站长工具seo综合查询adc
  • 北京响应式网站做logo那个网站
  • 如何申请免费网站空间刚察县wap网站建设公司
  • 哪里有网站推广软件免费推广seo策略方法
  • 阿里云备案网站 网站名称怎么写京icp备案查询
  • 网站开发岗位思维导图alexa排名
  • 自适应网站建设济南济南网站建设公司
  • 巴州网站建设库尔勒网站建设钟爱网络杭州微信网站制作
  • 52做网站南京市住房城乡建设门户网站
  • 网站开发精品课程贵阳市白云区官方网站
  • seo整站优化服务会计培训班一般收费多少
  • 批量网站访问检测怎么做好手机网站开发
  • 深圳网站建设公司哪家比较好shortcodes wordpress
  • 网站内链越多越好嘛可以做3d电影网站
  • 企业网站需求文档微商引流客源最快的方法
  • 交互式网站备案业务网站在线生成
  • 自建网站百度个人网站如何在百度上做推广
  • 如何安装wordpress模板竞价网站做seo
  • 做论坛网站如何赚钱电子商务营销推广
  • 想要自己做一个网站怎么做济宁百度网站建设
  • 海会网络建设网站wordpress刷不出图片
  • 一个人做商城网站网站推广的几个阶段
  • 做国学类网站合法吗html5教程pdf下载
  • 云南省文化馆网站建设二级域名分发平台
  • 网站版面布局结构图网站收录批量查询
  • 网站开发手机模拟器常州到丹阳