欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ActiveMQ系列教程(二)两种消息模型

程序员文章站 2022-07-13 22:52:54
...
 
两种消息模型:点对点和发布订阅

1.P2P (点对点)模式

ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
1)核心组件
消息队列(Queue)--消息存放的地方
发送者(Sender)--就是消息生产者
接收者(Receiver)--就是消息消费者
生产者生产的每个消息都被发送到一个特定的队列(queue),消费者从队列中获取消息。队列保留着(未被消费的)消息,直到他们被消费或超时。
 
2)P2P模式的特点
A. 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再留在消息队列中)
B. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列;同时接受者也不用在线等待发送者发送,只要消息没被消费,随时都可以去取
C. 接收者在成功接收消息之后需向队列应答成功(acknowledge)
 
3)应用场景
 如果你希望发送的每个消息必须且仅被消费一次的话,就可以使用P2P模式。以下举两个例子
A. 用户注册
不用消息队列场景

ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
 ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
   可以看到,由于发送注册验证邮件是一个比较费时的操作,且与主要注册逻辑无关,也不需要实时响应,所以可以采用消息队列以异步形式进行处理,服务端完成注册信息插入操作后立即返回给客户端,无需等待注册邮件发送完成

ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
 
    
B. 秒杀时流量削峰
   ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
     同样的,秒杀成功后后面还有下单、付款、库存操作、优惠策略、发货等一系列过程,在高并发应用场景下,如果同步处理、响应是不可接受的,而是应该及时向客户端返回秒杀请求结果,然后大量秒杀请求消息进入消息队列随后慢慢处理。

ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
 
 
2. Pub/Sub (发布与订阅)
类似于面向对象设计模式中的观察者模式
 
ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
 
ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
1)核心组件
 
主题(Topic)--相当于点对点中的队列,是消息的目的地或称容器
发布者(Publisher)--在特定主题上发布消息
订阅者(Subscriber) --订阅特定主题,接收消息
发布者将消息发送到主题(Topic),系统将这些消息传递给一到多个订阅者。
 
2)Pub/Sub的特点
A. 每个消息可以有多个消费者
B. 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,只能接收订阅后发布者发布的消息,不能接收到之前的消息(除非进行持久化订阅)。为了消费消息,订阅者必须保持运行的状态。
3)持久化消息
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
4)应用场景
如果你希望发送的消息可以被多个消费者处理的话,那么可以采用Pub/Sub模型。比如新闻客户端订阅栏目一样,订阅了才给你推送,同样的消息可以推送给所有订阅人
 
2. 消息的同步和异步消费
对于消息消费来说,不管是P2P还是发布订阅模式,JMS的消费者可以通过同步或异步两种方式来消费消息。 
○ 同步 
订阅者(发布-订阅模式)或接收者(点对点)调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞 
○ 异步 
订阅者或接收者可以注册为一个消息监听器。在消息到来之前接收者或订阅者可以正常做别的事。当消息到达之后,系统自动调用监听器的onMessage方法(相当于事件驱动)
下一篇将介绍ActiveMQ安装和基本配置
 
 
  • ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
  • 大小: 46.4 KB
  • ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
  • 大小: 59.9 KB
  • ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
  • 大小: 20.1 KB
  • ActiveMQ系列教程(二)两种消息模型
            
    
    博客分类: Java消息队列框架 消息队列;JMS;ActiveMQ;高并发; 
  • 大小: 39.9 KB