JMS

JMS(Java Message Service即JAVA消息服务)是一组jAVA应用程序接口,提供消息的创建、发送、接收、读取等服务;

JMS定义了一组公共应用程序接口和相应的语法,类似于JAVA数据库的统一访问接口JDBC,它是一种与厂商无关的API,使JAVA程序能与不同厂商的消息组件很好的通信;

JMS优势

异步:JMS天生就是异步的,客户端获取消息的时候,不需要主动发送请求,消息会自动发送给可用的客户端

可靠:JMS保证消息只会递送一次。大家都遇到过重复创建消息问题,而JMS能帮你避免该问题,只是避免而不是杜绝,所以在一些糟糕的环境下还是有可能会出现重复

JMS消息传递模型

  • 点对点(PTP)
  • 发布/订阅(publish/subscribe)

点对点消息传送模型(P2P)

在点对点消息传送模型中,应用程序由消息队列,发送者,接收者组成。每一个消息发送给一个特殊的消息队列,该队列保存了所有发送给它的消息(除了被接收者消费掉的和过期的消息)

点对点消息模型有如下特性:

  • 每个消息只有一个接受者;
  • 消息发送者和消息接受者并没有时间依赖性;
  • 当消息发送者发送消息的时候,无论接收者程序在不在运行,都能获取到消息;
  • 当接收者收到消息的时候,会发送确认收到通知(acknowledgement);

点对点消息模型图:

发布/订阅消息传送模型

在发布/订阅消息模型中,发布者发布一个消息,该消息通过topic传递给所有的客户端。在这种模型中,发布者和订阅者彼此不知道对方,是匿名的且可以动态发布和订阅topic。topic主要用于保存和传递消息,且会一直保存消息直到消息被传递给客户端

发布/订阅消息模型有如下特性:

  • 一个消息可以传递给多个订阅者;
  • 发布者和订阅者有时间依赖性,只有当客户端创建订阅后才能接受消息,且订阅者需一直保持活动状态以接收消息;
  • 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息;

发布/订阅消息模型图:

JMS模块

  • 管理对象(Administered objects)-连接工厂(Connection Factories)和目的地(Destination)
  • 连接对象(Connections)
  • 会话(Sessions)
  • 消息生产者(Message Producers)
  • 消息消费者(Message Consumers)
  • 消息监听者(Message Listeners)

JMS消息结构

  • 消息头
  • 消息属性
  • 消息体

JMS消息类型

  • TextMessage
  • MapMessage
  • BytesMessage
  • StreamMessage
  • ObjectMessage

JMS消息接收方式

  • 同步方式:使用同步方式接收消息的话,消息订阅者调用receive()方法。在receive()中,消息未到达或在到达指定时间之前,方法会阻塞,直到消息可用
  • 异步方式:使用异步方式接收消息的话,消息订阅者需注册一个消息监听者,类似于事件监听器,只要消息到达,JMS服务提供者会通过调用监听器的onMessage()递送消息

开源的消息系统

  • ActiveMQ
  • Kafka
  • RabbitMQ
  • memchcheQ

results matching ""

    No results matching ""