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

  • 相关阅读:
    ArcEngine 里面的日期
    ArcEngine连接Oracle数据库
    ArcGIS连接Oracle数据库
    ms sql 带自增列 带外键约束 数据导入导出
    获取指定 MethodInfo 的 MSIL 或者 C# 源码
    架构知识集锦
    ClickOnce手动更新
    委托简单例子
    C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReadWriteLock)】
    可扩展类库强制取消异步调用
  • 原文地址:https://www.cnblogs.com/east7/p/13728547.html
Copyright © 2011-2022 走看看