浅谈ActiveMq(下)

说起公共组件,免不了拿其他的组件做对比,我也没用过这么多组件,就从网上找一些。
RabbitMQ 重量级,实现经纪人框架(Broker);消息在发送给客户端时先在中心队列排队;对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。
ZeroMQ 可实现RabbitMQ不擅长的高级/复杂的队列
ActiveMQ 类似ZeroMQ,以代理人和点对点技术实现队列;也类似RabbitMQ,少量代码实现高级应用场景;
RocketMQ 做模块间的解耦
Jafka/Kafka Kafka为Publish/Subscribe消息队列系统;Jafka是在Kafka上孵化出来的Kafka升级版;
MQ设计的核心是什么呢,是消息。所以MQ的设计都是关于消息的,比如消息的消息落地和消息超时、重传、确认。MQ消息的发送分文上下两个半场,上半场是发送方作为生产者,MQ作为消息的接受者,而下半场则是MQ作为消息的生产者,接受者是我们自己写的程序。
MQ的幂等性是怎么保证的呢,或者说是需要谁去保证。上半场,当消息发送的时候,MQ-client生成id,保证上半场幂等。这个id与任何的意义都无关,由MQ来保证。而下半场,有很多种方式了,比如每个消息业务方都赋予一个id,业务接收方去重保证幂等。这个ID对单业务唯一,业务相关,对MQ透明。
绝大多数MQ都有两种模式,一种是queue,另一种就是topic。
点对点(queue):1.每个消息只能有一个消费者。2.消息的生产者和消费者之间没有时间上的相关性,无论消费者在生产者发送消息是是否处于运行状态,都可以提取消息。

发布/订阅(topic):1.每个消息都可以有多个消费者。2.生产者和消费者有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。允许持久订阅,放松了时间相关性要求。
消息消费的两种方式:同步消费:消费者调用receive 方法一直阻塞到消息到达。异步消费:在MQ上注册消息监听器,当有消息到达的时候通知消费者。
ActiveMq消息确认、消息必达是怎么做的呢,这就要讲到ack模式。只有在消息被确认之后,才认为已经被成功的消费了。消息消费有三个阶段:客户接受消息、客户处理消息和消息被确认。在事务性会话中,当一个事务被提交的时候,确认自动发生,在非事务行会话中,消息何时被确认取决于创建会话时的应待模式。有三个可选值:
Session. AUTO_ACKNOWLEDGE 自动确认
Session. CLIENT_ACKNOWLEDGE 客户端手动确认
Session. DUPS_OK_ACKNOWLEDGE 自动批量确认
ActiveMQ的持久订阅:首先消息生产者必须使用PERSISITENT提交消息。客户可以通过会话上的createDurableSubscriber方法来创建一个持久订阅,该方法的第一个参数必须是一个topic,第二个参数是订阅的名称。JMS provider 会存储发布到持久订阅对应的topic上的消息。如果最初创建持久订阅的客户或者任何其他客户,使用相同的连接工厂和连接的客户ID,那么该持久订阅就会被激活。JMS provider会向客户发送客户处于非激活状态时所发布的消息。持久订阅在某个时刻只能有一个激活的订阅者。订阅者在创建之后会一直保留,直到应用程序 调用会话上的unsubscribe方法。
ActiveMQ的消息事务:可以使用本地事务组合消息的发送和接收。JMS SESSION提供了commit和rollback方法供消费者进行使用。除非消息过期。如果使用请求/回复机制,即发送一个消息,同时希望在同一个事务中等待接收改消息的回复,那么程序将被挂起,直到事务提交,才会被重新执行。
消息临时目的地:可以通过会话上的createTemporaryQueue方法和createTemporaryTopic方法来创建临时目的地,他们存在的时候只限于创建他们的连接锁所保持的时间,只有创建该临时目的地的连接上的消息生产者才能从临时目的地中提取消息。
Activemq也提供了消息本地持久化,
KahaDB:提供了容量的提升和恢复能力
JDBC:基于JDBC存储的
Memory:基于内存的消息存储
KahaDB目前默认,使用事务日志和一个索引文件存储他的所有的地址。数据被追加到data logs文件中,当不需要时,log会被删除掉。AMQ基于文件、事务存储设计为快速消息存储的一个结构,该结构是以流的形式进行消息交互的。JDBC持久化,预定义一个表结构,像其中插入数据。
使用方面的东西,希望大家可以自己去看一下,最起码看一下官方文档。ActiveMq是非常容易搭建的。界面是这样的。里面可以看到很多东西,比如queues和topics,可以看到这两种消息的发送接受情况,Home是这个mq的基本属性。


程序员的压哨绝杀,欢迎大家关注,一起讨论技术问题,分享看球经验。

猜你喜欢

转载自blog.csdn.net/lhx574938077/article/details/80031327