正式介绍activeMQ之前,让我们先了解几个名词
一、JMS消息服务
即java的消息服务,JMS的客户端之间通过JMS进行异步的消息传输
1.消息模型
P2P point to point 点对点模式
Pub/Sub publish/Subscribe 发布订阅模式
每个消息被发送到队列,接收者从队列获取消息。队列里一直保留消息,直到消息被消费或超时。
P2P特点:
- 每个消息只能有一个消费者,一旦消费,即不在队列中
- 发送者和接收者不存在依赖性
- 接收者在接收成功后,要向队列应答成功。无特殊配置时,默认自动commit
使用场景:希望每个消息都被成功处理,且只有一个消费者
多个发布者将消息发送到主题,系统将消息传递给多个订阅者
Pub/Sub特点
- 每个消息可以有多个消费者
- 发布和订阅有时间上依赖性,针对某个topic,要先创建一个订阅者才能消费消息,且订阅者必须保持运行状态
- 为缓和这种严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
使用场景:
如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型
2.消息如何消费
1).同步:调用使用receive方法,此方法在接收到消息之前会一直阻塞
2).异步:注册消息监听器,消息到达时,系统自动调用监听器的onMessage方法
二,消息队列中间件
1,应用场景
(1) 异步处理
例如:注册后发送短信、邮件,下单后调用第三方支付接口等,将需要执行的消息放入队列,客户端会迅速收到响应,有利于用户体验
(2)应用解耦
例如:在业务复杂的项目里,一个请求涉及跨系统,跨接口操作,当第三方、第四方系统网络异常等时,导致请求失败,耦合太强。
(3)流量削锋
例如:秒杀活动,秒杀时不做业务处理,交给消息队列,并限制消息队列的长度,可有效控制参与人数并防止高流量压垮应用
(4)日志处理
例如:kafka应用,日志采集写入kafka队列,此队列复杂接收,存储和转发,订阅者订阅kafka里的日志数据
(5)消息通讯
如:消息室,微博等