消息中间件之ActiveMQ基本概念

1 ActiveMQ

1.1 JMS开发的基本步骤

  1. 创建一个connection factory
  2. 通过connection factory来创建JMS connection
  3. 启动JMS connection
  4. 通过connection创建JMS session
  5. 创建JMS destination
  6. 创建JMS producer或者创建JMS message并设置destination
  7. 创建JMS consumer或者是注册一个JMS message listener
  8. 发送或者接受JMS message(s)
  9. 关闭所有的JMS资源(connection,session,producer,consumer等)

1.2 两种消费方式

1.2.1 同步阻塞方式(receive())

订阅者或接收者调用MessageConsumer的receive()方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞

1.2.2 异步非阻塞方式(监听器onMessage())

订阅者或接收者通过MessageConsumer的setMessageListener(MessageListener listener)注册一个消息监听器,当消息到达之后,系统自动调用监听器MessageListener的onMessage(Message message)方法


1.3 Topic

发布/订阅消息传递域的特点如下:

  1. 生产者将消息发布到topic中,每个消息可以有多个消费者,属于1:N的关系
  2. 生产者和消费者之间有时间上的相关性。订阅某一个主题的消费者只能消费自它订阅之后发布的消息
  3. 生产者生产时,topic不保存消息它是无状态的不落地,假如无人订阅就去生产,那就是一条废消息,所以,一般先启动消费者再启动生产者。       

JMS规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。持久性订阅允许消费者消费它在未处于激活状态时发送的消息。一句话,好比我们的微信公众号订阅。

topic与queue两大模式比较:

1.4 JMS组成的四大元素

JMS provider

实现JMS接口和规范的消息中间件,也就是我们MQ服务器

JMS producer

消息生产者,创建和发送JMS消息的客户端应用

JMS consumer

消息消费者,接收和处理JMS消息的客户端应用

JMS message

消息头   消息属性   消息体

1.5 java消息可靠性

1.5.1 持久性

参数设置说明

非持久

       messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

       非持久化:当服务器宕机,消息不存在

持久

       messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);

       持久化:当服务器宕机,消息依然存在

默认它是持久

持久的Queue

持久化消息,这是队列的默认传送模式,此模式只能保证这些消息只被传送一次和成功使用一次。可靠性是优先考虑的因素。可靠性的另一个重要方面是确保持久性消息传送至目标后,消息服务在向消费者传送它们之前不会丢失这些消息。

持久化的Topic

  1. 一定要先运行一次消费者,等于向MQ注册,类似我订阅了这个主题
  2. 然后再运行生产者发送消息,此时
  3. 无论消费者是否在线,都会接收到,不在线的话,下次连接的时候,会把没有收过的消息都接收下来。

1.5.2 Transaction 事务

producer提交时的事务

         false

                只要执行send,就进入到队列中

         true

               先执行send再执行commit,消息才被真正提交到队列中

事务偏生产者/签收偏消费者

1.5.3 Acknowledge:签收

非事务

自动签收(默认)——Session.AUTO_ACKNOWLEDGE

手动签收——Session.CLIENT_ACKNOWLEDGE

                             客户端调用acknowledge方法手动签收——message.acknowledge();

允许重复消息——Session.DUPS_OK_ACKNOWLEDGE

事务

生产事务开启,只有commit后才能将全部消息变为已消费

消息生产者

消息消费者

签收和事务的关系

在事务性会话中,当一个事务被成功提交则消息被自动签收。如果事务回滚,则消息会被再次传送。

非事务性会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgement mode)

1.6 JMS点对点总结

1.7 JMS发布订阅总结

1.8 非持久订阅

1.9 持久订阅

1.10 什么是java消息服务

Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持java应用程序开发。在javaEE中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务组件关联起来以达到解耦/异步削峰的效果。

2 RocketMQ

RocketMQ是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ的特点是纯JAVA实现集群和HA实现相对简单在发生宕机和其它故障时消息丢失率更低

2.1 消息队列的详细比较

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值