`
y806839048
  • 浏览: 1120395 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

activemq ack机制

阅读更多

 

1,同步,异步ack---消费端,服务端

2,ack立即确认,ack在优化的情况下阈值确认

3,ack模式,类型---重发,删除时机

 

 

 

 

发送端:

 

1,同步可以设置为异步,不需要等待 broker ack 生产端

 

2,队列满了之后就用游标

 

3,组合消息目的

 

发送端的重发需要硬编码

 

 

broker  协调端  ---响应ack:

 

 

协调端的重发送,根据ack类型自动不断重发---消费端选择手动ack的时候就需要接到消息,硬编码ack

 

 

 

 

接收端:

 

1,消息镜像队列---监控队列中所有经过的消息

 

 

2,消费端没有正常接受,  消费端 不同的 ack  broker会有不同的反应---例如:broker重发,broker取消删除队列消息,只有消费端才有多种ack模式

消费端的ack也分同步异步

 

 

ack模式是active-- session共享的,一旦制定所有的消费者都用此消费模式,每种ack模式下有不同的ack类型(服务会根据不同的响应在确定的模式下给出不同的类型)

一般是没有异常就是正确的确认类型,有异常抛出就是用类似需要重发的确认类型(try-catch可以控制即使出错也不重发)

 

 

CLIENT_ACKNOWLEDGE : 客户端手动确认 ,可以控制确认的时机,例如只有当正确消费后才确认

 

 

optimizeAcknowledge  ---是否开启优化

 

有ack就是消息到达网络是通的,至于具体是否成功处理就是需要具体的ack模式和类型处理

 

不开启即同步----就是立即确认(只是收到确认,不是处理成功确认,直到acknowledge才是消费成功)

 

 

开启优化之后才能设置ack模式,有了ack模式之后遇到具体的情况做具体的ack类型反馈,即使不立即确认也会在达到阈值后acknowledge,在acknoledge时

会把目前为止所有正确消费的消息确认

 

 

 

 

 

开始方式一:

 

    1) 在brokerUrl中增加如下查询字符串:   

 

String brokerUrl = "tcp://localhost:61616?" +   

                   "jms.optimizeAcknowledge=true" +   

                   "&jms.optimizeAcknowledgeTimeOut=30000" +   

                   "&jms.redeliveryPolicy.maximumRedeliveries=6";  

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrl);  

 

 

    2) 在destinationUri中,增加如下查询字符串:

 

 

 

Java代码  收藏代码

String queueName = "test-queue?customer.prefetchSize=100";  

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  

Destination queue = session.createQueue(queueName);  

 

 

在事物型的消息中事物提交就是acknowledge

 

 

 

 

重发的消息1,存在硬盘上的,2管道中未acknowledge的消息

 

消费端有最大的容量,超出不再接收,假死,当然在达到prefech阈值之前会自动acknowledge(prefech就是为了批量push给消费端)

 

DUPS_OK_ACKNOWLEDGE :

 

AUTO_ACK + optimizeACK + (prefetch > 0)=自动确认+开启优化+获取阈值>0----批量acknowledge(阈值确认)

 

AUTO_ACK----直接acknowledge,来一条确认一条

 

超过了重发的次数就放入dead letter

 

参考:

https://blog.csdn.net/zhu_tianwei/article/details/46303535

 

http://shift-alt-ctrl.iteye.com/blog/2020182

分享到:
评论

相关推荐

    ActiveMQ消息传送机制以及ACK机制详解

    二、ActiveMQ ACK机制 ACK(Acknowledgement)机制是确认消息已被正确处理的关键。ActiveMQ提供了一种优化的ACK选项,以提高消息处理效率: 1. Optimize ACK:启用此选项后,消费者可以在消费一定数量的消息后一次...

    springboot整合activemq 消费者 ACK手动确认 &消息重发

    springboot整合 activeMq 消费者 消费接收消息 包含队列模式点对点发 以及 主题模式一对多 这是消费者的demo consumer 。...里面有消息重发机制,手动确认ACK模式。 配合 producer 生产者demo使用。

    ActiveMQ开发规范及方案

    ACK机制是指ActiveMQ对消息的ACK机制,即当消费者消费消息时,需要向ActiveMQ发送ACK确认消息。ACK机制可以确保消息的可靠性和一致性。 场景分析 在使用ACK机制时,需要对系统进行场景分析,以确定系统的需求和...

    activemq的简单配置

    3. **异步处理**:在高并发和大流量的应用场景下,ActiveMQ支持异步消息处理机制,这有助于提高系统的响应速度和处理能力。 4. **系统间的通信**:ActiveMQ支持多种协议(如AMQP、STOMP等),这使得不同系统之间的...

    0924分布式消息通信-ActiveMQ1

    本文将深入探讨ActiveMQ 的一些核心特性,包括消息发送策略、持久化、消费者行为、消息确认机制以及Spring 集成。 1. **消息发送策略**: - **持久化消息**:默认情况下,生产者发送的消息是持久化的,即使在消息...

    ActiveMQ消息中间件面试专题.pdf

    ActiveMQ 的 prefetch 机制可能会导致消息的不均匀消费。解决方案是将 prefetch 设为 1,每次处理 1 条消息,处理完再去取,这样也慢不了多少。 六、死信队列。 如果你想在消息处理失败后,不被服务器删除,还能被...

    ActiveMQ消息中间件面试专题.zip

    - **消息确认机制**:了解ACK模式(自动确认、客户端确认、邓巴数确认)及其适用场景。 - **消息选择器**:如何通过消息选择器筛选特定的消息进行消费。 - **网络拓扑和故障转移**:理解网络故障时的集群和复制...

    php实现通过stomp协议连接ActiveMQ操作示例

    4. 订阅队列时,可以设置不同的订阅模式,如预定义的`ACK_AUTO`(自动确认)、`ACK_CLIENT`(客户端确认)等。 5. 读取队列时,`readFrame()`方法会阻塞直到接收到一个消息,或者达到超时时间(如果没有设置超时,则...

    Java消息中间件面试题

    ③消费者确认机制,为auto,spring确认消息处理成功后完成ack。 2. RabbitMQ重复消费问题解决方案: RabbitMQ重复消费问题可以通过幂等性解决,如Redis分布式锁、数据库锁等,也可以通过在处理消息时先到数据库查询...

    springboot集成消息队列实现发送与接收demo

    3. 消费确认:不同MQ有不同的确认机制,如RabbitMQ的ACK,Kafka的Commit,需要正确处理以避免消息丢失或重复。 4. 容错和可靠性:通过设置重试策略、死信队列等手段保证消息的可靠传递。 5. 并发控制:合理设置消费...

    Apache_Kafka_Share

    1. **消息确认机制**:Kafka的生产者无法保证消息的唯一性,而ActiveMQ提供了每条消息的ACK机制,确保了Exactly Once的消息语义。 2. **数据处理方式**:Kafka采用二进制数据格式并进行批处理,利用Page Cache提高...

    Apache Kafka面试题

    此外,生产者还可以设置消息确认机制(ACK)来确保消息的成功发送: - **ACK=0**: 不等待任何确认,意味着消息可能丢失。 - **ACK=1**: 只等待Leader Partition的确认,但跟随者分区(Follower Partition)的数据...

    Java高级架构面试知识点整理.pdf

    - **消息确认机制**:确保消息被正确消费,避免消息丢失,例如使用ACK机制。 - **监控与告警**:设置完善的监控体系,及时发现并解决潜在问题,防止故障扩大。 面试中,理解面试官的心理很重要,他们可能关注你对...

    RabbitMQ浅析.pdf

    ACK机制分为自动确认和手动确认两种模式: - 自动ACK:消息一旦被接收,消费者自动发送ACK确认消息,保证消息不会被重复消费。 - 手动ACK:消费者需要在接收消息后,手动调用确认机制,这种方式适合处理重要消息,...

    jms英文书小合集

    4. **消息模型与概念**: 学习JMS时,会接触到消息模型,包括消息的结构(如头、属性和体)、持久性、事务处理、消息确认(ACK)机制以及消息的生存期(TTL)等。理解这些概念对于有效利用JMS进行应用程序间通信至关...

    Java面试MQ(Message Queue)消息队列.pdf

    - 使用ACK机制确认消息已成功处理,未收到确认则重发消息。 - 对于Kafka,可以通过设置合适的副本因子(replication factor)来保证消息的冗余存储。 #### 八、如何保证消息的顺序性? - 在某些应用场景下,需要保证...

    消息队列资料 系列课程资料

    1. 消息确认:确保消息已被正确处理,如使用ACK机制。 2. 消息重复:防止消息重复消费,可能需要引入唯一标识或序列号。 3. 消息顺序:在某些场景下,需要保持消息的处理顺序,这需要特殊设计。 4. 消费者心跳与重连...

Global site tag (gtag.js) - Google Analytics