ActiveMQ--JMS、消息的组成

Java EE

JavaEE是一套使用Java进行企业级应用开发的、大家一致遵守的13个核心规范工业标准。JavaEE平台提供了一个基于组件的方法来加快设计、开发、装配及部署企业级应用程序。

  1. JDBC(Java Database)数据库连接
  2. JNDI(Java Naming and Directory)Java的命名和目录接口
  3. EJB(Enterprise JavaBean)
  4. RMI(Remote Method Invoke)远程方法调用
  5. Java IDL(Interface Description Language)/ CORA(Common Object Broker Architecture)接口定义语言/公用对象请求代理程序体系结构
  6. JSP(Java Server Page)
  7. Servlet
  8. XML(Extensible Markup Language)可扩展标记语言
  9. JMS(Java Message Service)Java消息服务
  10. JTA(Java Transaction API)Java 事务 API
  11. JTS(Java Transaction Service)Java事务服务
  12. JavaMail
  13. JAF(JavaBean Activation Framework)

JMS

Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于JAVA应用程序开发。在JAVA EE中,当两个应用程序使用JMS进行通信时,他们之间并不是直接相连的,而是通过一个公共的消息收发服务组件关联起来以达到解耦/异步削峰的效果。

在这里插入图片描述

  • JMS provider:实现JMS接口和规范的消息中间件,也就是我们的MQ服务器。
  • JMS producer:消息生产者,创建和发送JMS消息的客户端应用。
  • JMS consumer:消息消费者,接收和处理JMS消息的客户端应用。
  • JMS message:JMS消息

消息的组成

  • 消息头
字段 描述
JMSDestination 消息发送的目的地:主要是指Queue和Topic,自动分配
JMSDeliveryMode 传送模式。有两种 :持久模式和非持久模式。一条持久性的消息应该被传送“一次仅仅一次”,这就意味者如果JMS提供者出现故障,该消息并不会丢失,它会在服务器恢复之后再次传递。一条非持久的消息最多会传送一次,这意味这服务器出现故障,该消息将永远丢失。自动分配
JMSExpiration 消息过期时间,等于 Destination 的send 方法中的timeToLive值加上发送时刻的GMT 时间值。如果timeToLive 值等于零,则JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。自动分配
JMSPriority 消息优先级,从 0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。默认是4级。自动分配
JMSMessageID 唯一识别每个消息的标识,由JMS Provider 产生。自动分配
JMSTimestamp 一个JMS Provider在调用send()方法时自动设置的。它是消息被发送和消费者实际接收的时间差。自动分配
JMSCorrelationID 用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。在大多数情况下,JMSCorrelationID用于将一条消息标记为对JMSMessageID标示的上一条消息的应答,不过,JMSCorrelationID可以是任何值,不仅仅是JMSMessageID。由开发者设置
JMSReplyTo 提供本消息回复消息的目的地址。由开发者设置
JMSType 消息类型的识别符。由开发者设置
JMSRedelivered 如果一个客户端收到一个设置了JMSRedelivered属性的消息,则表示可能客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。如果该消息被重新传送,JMSRedelivered=true反之,JMSRedelivered =false。自动设置
  • 消息体
类型 描述
TextMessage 普通字符串消息,包含一个String
MapMessage 一个Map类型的消息,key为String类型,而值为String类型
BytesMessage 二进制数组消息,包含一个byte[]
StreamMessage Java数据流消息,用标准流操作来顺序的填充或读取
ObjectMessage 对象消息,包含一个可序列化的Java对象
  • 消息属性

消息属性,包含以下三种类型的属性:

  1. 应用程序设置和添加的属性,比如:
    Message.setStringProperty(“hello”, “my name is wangsaichao!”);
  2. JMS定义的属性
    使用“JMSX”作为属性名的前缀,
    connection.getMetaData().getJMSXPropertyNames(), 方法返回所有连接支持的JMSX 属性的名字。
  3. JMS供应商特定的属性
    JMS定义的属性如下:
    • JMSXUserID:发送消息的用户标识,发送时提供商设置
    • JMSXAppID:发送消息的应用标识,发送时提供商设置
    • JMSXDeliveryCount:转发消息重试次数,第一次是1,第二次是2,… ,发送时提供商设置
    • JMSXGroupID:消息所在消息组的标识,由客户端设置
    • JMSXGroupSeq:组内消息的序号第一个消息是1,第二个是2,…,由客户端设置
    • JMSXProducerTXID :产生消息的事务的事务标识,发送时提供商设置
    • JMSXConsumerTXID :消费消息的事务的事务标识,接收时提供商设置
    • JMSXRcvTimestamp :JMS 转发消息到消费者的时间,接收时提供商设置
    • JMSXState:假定存在一个消息仓库,它存储了每个消息的单独拷贝,且这些消息从原始消息被发送时开始。每个拷贝的状态有:1(等待),2(准备),3(到期)或4(保留)。由于状态与生产者和消费者无关,所以它不是由它们来提供。它只和在仓库中查找消息相关,因此JMS没有提供这种API。由提供商设置

各种消息中间件对比

在这里插入图片描述

发布了625 篇原创文章 · 获赞 1847 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/104046677
今日推荐