ActivityMQ的基本概念和应用场景

ActivityMQ

  • 类型
  1. topic 主题存储,用于订阅/消费模型。主题中的消息会发送给消费者同时处理,只有在消息可以重复处理的场景下使用
  2. queue 队列存储,常用于点对点模型。默认只能由唯一的一个消费者处理,一旦消费消息删除
  • 简单对比
1 Topic Queue
Publish/Subsribe Message point to point
有无状态 默认数据是不落地,是无状态的 Queue数据一般会在服务器上以文件形式保存,也可配置成DB存储
完整性保障 并不保证publish的每条数据,subscribe都能接收到 保证每条数据都能接收到,并且不超时
消息是否会丢失 一般来说publish消息到某一个topic时,只有监听着的sub才能接收到,如果没有监听则该topic就丢失了 sender发送消息到queue,reciever可以异步接收消息,如果占时没有处理消息也不会丢失。前提消息不超时
消息发布接收策略 一对多的消息发布策略,监听同一个topic地址的多个sub能够接收消息 一对一的发布策略,一个sender发布的消息只能一个reciever来消费,消费完后通知MQ进行删除或其他操作
  • 消息发送的步骤
  1. 获取activityMQ的连接工厂
  2. 获取一个MQ的连接
  3. 获取session
  4. 找到目的地destination消费端,也会从这个地方消费消息
  5. 创建消息,向目的地写消息
  6. 关闭session
JMS消息由以下三部分组成
  • 消息头

    每个消息头字段都有相应的getter和setter方法
  • 消息属性

    如果需要除消息头之外的值,那么可以使用消息属性
  • 消息体

    JMS定义的消息类型有TextMessage,MapMessage,BytesMessage,StreamMessage和ObjectMessage。
  1. TextMessage文本消息
  2. MapMessage K/V的形式
  3. BytesMessage 字节流
  4. StreamMessage Java原始的数据流
  5. ObjectMessage 序列化的Java对象
应用场景
  • 异步通信

    有些业务不想也不需要立即处理消息,消息队列提供了异步处理机制,允许用户把一个消息放入队列但并不立即处理它,想向队列中放多少就放多少,然后再需要的时候再去处理
  • 缓冲

    在任何重要的系统中,都会需要不同的处理时间的元素,消息队列通过一个缓冲层来帮助任务最高效率的执行,该缓冲有助于控制和优化数据流经过系统的速度,以调节系统响应的时间
  • 解耦

    降低工程间的强依赖程度,针对异构系统进行适配。在项目启动之初来预测将来项目会碰到什么需求,是极其困难
    的。通过消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,当
    应用发生变化时,可以独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。异构系统的消息通信
  • 冗余

    有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们
    已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的插入获取删除范式中,在把一个
    消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直
    到你使用完毕。
  • 扩展性

    因为消息队列解耦了处理的过程,所以增大消息入队和处理的频率是很容易的,只需另外增加处理过程即可,不需要改变代码、不需要调节参数,便于分布式扩容,也就是横向扩容

猜你喜欢

转载自blog.csdn.net/pengyiccb/article/details/114109794