zoukankan      html  css  js  c++  java
  • ActiveMQ消息投递方式之异步投递【转】

      ActiveMQ消息投递方式一共有四种:同步投递、异步投递、延迟投递和定时投递。

      同步发送:消息生产者使用持久(Persistent)传递模式发送信息的时候,Producer.send()方法会被阻塞,直到broker发送一个确认消息给生产者(ProducerAck),这个确认消息按时broker已经成功接收到消息并把消息保存到二级存储中。

    异步投递

      如果应用程序能够容忍一些消息的丢失,那么可以使用异步发送。异步发送不会在受到broker的确认之前一直阻塞Producer.send方法。

      如果想要使用异步,在brokerURL中增加jms.alwaysSyncSend=false&jms.useAsyncSend=true属性

      1. 如果设置了alwaysSyncSend=true系统将会忽略useAsyncSend设置的值都采用同步。

      2. 当alwaysSyncSend=false时,“NON_PERSISTENT”(非持久化),事务中的消息将使用“异步发送”

      3. 当alwaysSyncSend=false时,如果指定了useAsyncSend=true,“PERSISTENT”类型的消息使用异步发送。如果useAsyncSend=false,“PERSISTENT”类型的消息使用同步发送。

      总结:默认情况(alwaysSyncSend=false,useAsyncSend=false),非持久化消息,事务内的消息均采用异步发送;对于持久化消息采用同步发送。 

      异步投递如何确认发送成功:

      异步投递丢失消息的场景是:生产者设置UserAsyncSend=true,使用producer.send(msg)持续发送消息。

      由于消息不阻塞,生产者会认为所有send的消息均被成功发送至MQ。如果MQ突然宕机,此时生产者端内存中尚未被发送至MQ的消息都会丢失。这时,可以给异步投递方法接收回调,以确认消息是否发送成功。 

    延迟投递和定时投递

      关于延迟投递,请参考《springBoot整合ActiveMQ实现延时发现消息》。关于定时投递,就是使用定时任务发送消息,这里一笔带过,请自行查阅文档。  

      文章转发自[1],到这里就结束了,看完之后你有什么想法想要跟大家分享呢?评论区在等着你!

    Reference

    [1]https://www.cnblogs.com/flyinghome/p/12316403.html

  • 相关阅读:
    js数组与字符串的相互转换方法
    js页面跳转常用的几种方式
    js刷新页面方法大全
    IIS上开启反向代理实现Vue项目接口跨域处理
    【问题解决记录】vue解决低版本安卓与ios10以下系统兼容性问题
    【解决问题记录】https网站中请求http资源接口报错与netERRSSLPROTOCOLERROR错误的解决
    indexedDb数据库基本操作
    Object常用方法
    htmlToTex
    禁止鼠标右键保存/拖动/选中/复制 图片/文字
  • 原文地址:https://www.cnblogs.com/east7/p/13728547.html
Copyright © 2011-2022 走看看