JMS
2016-05-24 00:00
155 查看
摘要: JAVA消息服务
使用消息服务的原因:
1.松散耦合但是高内聚。使用消息服务的客户机不需要实现通用接口,不需要了解对方。消息服务提供了标准接口。
2.不直接通信。客户机不直接对话,而通过中间媒介,消息服务扮演 缓冲区,并提供 安全控制。
3.保证消息传递。 JMS的提供者保持消息持久,直到客户机接受为止。
4.异步通信。
5.一对多、多对多和多对一通信。
java消息服务主要由:消息头、属性和消息体组成。
JMSDestination:消息发送的目的地;
JMSDeliveryMode:传递模式, 有两种模式:PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点;
JMSMessageID:唯一识别每个消息的标识,由JMS Provider 产生;
JMSTimestamp:一个消息被提交给JMS Provider 到消息被发出的时间;
JMSCorrelationID:用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息;
JMSReplyTo:提供本消息回复消息的目的地址;
JMSRedelivered:如果一个客户端收到一个设置了JMSRedelivered 属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged);
JMSType:消息类型的识别符;
JMSExpiration:消息过期时间,等于 QueueSender 的 send 方法中的 timeToLive 值或 TopicPublisher 的publish 方法中的 timeToLive 值加上发送时刻的 GMT 时间值。如果 timeToLive 值等于零,则 JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。
JMSPriority:消息优先级,从 0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求 JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。
TextMessage:java.lang.String 对象,如 xml 文件内容;
MapMessage:名/值对的集合,名是 String 对象,值类型可以是 Java 任何基本类型;
BytesMessage:字节流;
StreamMessage:Java 中的输入输出流;
ObjectMessage:Java 中的可序列化对象;
Message:没有消息体,只有消息头和属性。
Java 消息服务的规范包括两种消息模式,点对点和发布者/订阅者。
使用消息服务的原因:
1.松散耦合但是高内聚。使用消息服务的客户机不需要实现通用接口,不需要了解对方。消息服务提供了标准接口。
2.不直接通信。客户机不直接对话,而通过中间媒介,消息服务扮演 缓冲区,并提供 安全控制。
3.保证消息传递。 JMS的提供者保持消息持久,直到客户机接受为止。
4.异步通信。
5.一对多、多对多和多对一通信。
java消息服务主要由:消息头、属性和消息体组成。
消息头 (Header)
消息头包含消息的识别信息和路由信息,消息头包含一些标准的属性如:JMSDestination, JMSMessageID 等。消息头 | 由谁设置 |
JMSDestination | send 或 publish 方法 |
JMSDeliveryMode | send 或 publish 方法 |
JMSExpiration | send 或 publish 方法 |
JMSPriority | send 或 publish 方法 |
JMSMessageID | send 或 publish 方法 |
JMSTimeStamp | send 或 publish 方法 |
JMSCorreleationID | 客户端 |
JMSReplyTo | 客户端 |
JMSType | 客户端 |
JMSRedeliverred | JMS Provider |
属性 (Properties)
除了消息头中定义好的标准属性外,JMS 提供一种机制增加新属性到消息头中,这种新属性包含以下几种: 1. 应用需要用到的属性;2. 消息头中原有的一些可选属性;3. JMS Provider 需要用到的属性。标准的 JMS 消息头包含以下属性:JMSDestination:消息发送的目的地;
JMSDeliveryMode:传递模式, 有两种模式:PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点;
JMSMessageID:唯一识别每个消息的标识,由JMS Provider 产生;
JMSTimestamp:一个消息被提交给JMS Provider 到消息被发出的时间;
JMSCorrelationID:用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息;
JMSReplyTo:提供本消息回复消息的目的地址;
JMSRedelivered:如果一个客户端收到一个设置了JMSRedelivered 属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged);
JMSType:消息类型的识别符;
JMSExpiration:消息过期时间,等于 QueueSender 的 send 方法中的 timeToLive 值或 TopicPublisher 的publish 方法中的 timeToLive 值加上发送时刻的 GMT 时间值。如果 timeToLive 值等于零,则 JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。
JMSPriority:消息优先级,从 0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求 JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。
消息体 (Body)
JMS API 定义了 5 种消息体格式,也叫消息类型,你可以使用不同形式发送接收数据并可以兼容现有的消息格式,下面描述这 5 种类型:TextMessage:java.lang.String 对象,如 xml 文件内容;
MapMessage:名/值对的集合,名是 String 对象,值类型可以是 Java 任何基本类型;
BytesMessage:字节流;
StreamMessage:Java 中的输入输出流;
ObjectMessage:Java 中的可序列化对象;
Message:没有消息体,只有消息头和属性。
Java 消息服务的规范包括两种消息模式,点对点和发布者/订阅者。
相关文章推荐
- netty
- 解决使用Log4j启动SLF4J警告
- 如何在CSS中自定义鼠标样式?
- 使用编译时注解方式实现View注入(Android Studio)
- centOS6.5下安装xampp
- Hust oj 2121 你猜猜(水题)
- 水题 Box of Bricks
- CSS HACK
- 使用CSS3伪类选择器美化按钮
- SEO的系统化策略分析
- Oracle中nchar,char,varchar 与nvarchar区别
- Oracle数据库对象 序列
- SQL*Plus用法指南
- 数据库概论
- 纯Oracle实现的日历
- Oracle 日常语句总结
- Oracle merge into的使用
- Oracle数据行拆分多行
- oracle中in和exists的区别
- Oracle学习笔记七 锁