消息队列的基本介绍

什么是JMS?

  JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。

应用场景

  两个应用程序之间,或分布式系统中发送消息,进行异步通信

消息模型

  • Point-to-Point(P2P)
  • Publish/Subscribe(Pub/Sub)

异步消息的好处

  • 无需等待

    当一个消息被异步发送,客户端不需要等待它处理完成。客户端直接把消息扔给broker然后做其它事情,broker负责把消息送到合适的目的地

  • 面向消息和解耦

    消息异步发送是以数据为中心的。这就意味着客户端不需要和某个方法签名绑定,任何queue或topic的订阅者都可以处理客户端发送的消息。客户端不必再关心服务方任何相关的问题

  • 可靠性保证

    消息是异步发送时,客户端与服务之间被broker隔离,客户端只负责发送消息,即使当发送消息时服务挂掉,消息也会被broker存储起来,等到服务可用时再接着进行处理

Point-to-Point(P2P)消息模型简介

涉及概念

  • 消息队列(Queue)
  • 发送者(Sender)
  • 接受者(Receiver)
  • 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时

p2p的特点

  • 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
  • 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
  • 接收者在成功接收消息之后需向队列应答成功

注意:

  尽管消息队列中的每个消息只有一个接收者,但这并不意味着只能有一个接收者从队列获取消息,可以同时有多个接收者从队列获取消息,只不过它们只能处理各自接收到的消息。可以很方便的通过增加消费者监听同一个queue来拓展应用的处理能力

Publish/Subscribe(Pub/Sub)模型

涉及概念

  • 主题(Topic)
  • 发布者(Publisher)
  • 订阅者(Subscriber)
  • 客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者

Pub/Sub的特点

  • 每个消息可以有多个消费者
  • 如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

 消息的消费

  在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息

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

  异步
    订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。

JMS编程步骤

 activeMQ实战

原文地址:https://www.cnblogs.com/htyj/p/8192209.html