Java EE
JavaEE是一套使用Java进行企业级应用开发的、大家一致遵守的13个核心规范工业标准。JavaEE平台提供了一个基于组件的方法来加快设计、开发、装配及部署企业级应用程序。
- JDBC(Java Database)数据库连接
- JNDI(Java Naming and Directory)Java的命名和目录接口
- EJB(Enterprise JavaBean)
- RMI(Remote Method Invoke)远程方法调用
- Java IDL(Interface Description Language)/ CORA(Common Object Broker Architecture)接口定义语言/公用对象请求代理程序体系结构
- JSP(Java Server Page)
- Servlet
- XML(Extensible Markup Language)可扩展标记语言
- JMS(Java Message Service)Java消息服务
- JTA(Java Transaction API)Java 事务 API
- JTS(Java Transaction Service)Java事务服务
- JavaMail
- 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对象 |
- 消息属性
消息属性,包含以下三种类型的属性:
- 应用程序设置和添加的属性,比如:
Message.setStringProperty(“hello”, “my name is wangsaichao!”); - JMS定义的属性
使用“JMSX”作为属性名的前缀,
connection.getMetaData().getJMSXPropertyNames(), 方法返回所有连接支持的JMSX 属性的名字。 - JMS供应商特定的属性
JMS定义的属性如下:- JMSXUserID:发送消息的用户标识,发送时提供商设置
- JMSXAppID:发送消息的应用标识,发送时提供商设置
- JMSXDeliveryCount:转发消息重试次数,第一次是1,第二次是2,… ,发送时提供商设置
- JMSXGroupID:消息所在消息组的标识,由客户端设置
- JMSXGroupSeq:组内消息的序号第一个消息是1,第二个是2,…,由客户端设置
- JMSXProducerTXID :产生消息的事务的事务标识,发送时提供商设置
- JMSXConsumerTXID :消费消息的事务的事务标识,接收时提供商设置
- JMSXRcvTimestamp :JMS 转发消息到消费者的时间,接收时提供商设置
- JMSXState:假定存在一个消息仓库,它存储了每个消息的单独拷贝,且这些消息从原始消息被发送时开始。每个拷贝的状态有:1(等待),2(准备),3(到期)或4(保留)。由于状态与生产者和消费者无关,所以它不是由它们来提供。它只和在仓库中查找消息相关,因此JMS没有提供这种API。由提供商设置