- 浏览: 958965 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
message必须通过session创建,以便完成对应的初始化,而不是通过new创建,new创建出来的对象,确实很多信息。
Message
消息由三部分组成
头,属性和内容。
头
所有获取头内容的方法都一getJMSXxx命名。
大致定义如下
其中消息头分为两类,一类是自动分配的,一类是开发人员指定的,大多数是自动分配。
获取消息头一般通过Message对象就可以获取
设置消息头,自动类则大多是通过发送者设置。非自动类头则通过message对象设置。
JMSDestination
该头信息用来标示来源,是一个Topic或者Queue对象。
JMSDeliveryMode
信息交付模式,分为永久的和非永久的,永久的情况,jms收到消息,就持久化,防止丢失,而非永久的JMS中间件要是挂了,就呵呵吧。
int deliverymode = message.getJMSDeliveryMode();
if (deliverymode == javax.jms.DeliveryMode.PERSISTENT) {
...
} else { // equals DeliveryMode.NON_PERSISTENT
...
}
如上方式可以判断是否永久。
设置非永久性消息是发送者设置的。
TopicPublisher topicPublisher = topicSession.createPublisher(topic);
topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
JMSMessageID
消息ID,唯一标示,在做历史库信息的时候很有用。
String messageid = message.getJMSMessageID();
JMSTimestamp
长整型,而不是时间形,用来确定中间件收到的时间(不是发送者发送的时间)。
long timestamp = message.getJMSTimestamp();
JMSExpiration
消息过期时间。
long timeToLive = message.getJMSExpiration();
,也是通过发送者设置过期时间
topicPublisher.setTimeToLive(3600000);。
0的时候,不会过期。
JMSRedelivered
是否重新发送boolean isRedelivered = message.getJMSRedelivered()
JMSPriority
设置优先级0-4是正常级别,5-9是高优先级别,
int priority = message.getJMSPriority();
TopicPublisher topicPublisher = TopicSession.createPublisher(someTopic);
topicPublisher.setPriority(9);
另外消息发送出去后,setPriority将会被忽略。
JMSReplyTo
一些情况下,需要再消费者收到消息后,进行回复
//消息生产者进行回复设置,需要定义一个Destination,来帮助消费者回复
message.setJMSReplyTo(topic);
//消息消费者
Topic topic = (Topic) message.getJMSReplyTo();//获取生产者的信息
JMSCorrelationID
对于需要回复的情况下,该值会与发送者的消息的MessageId相同,来表示对哪个消息回复。当然也不是必须相同
JMSType
程序员可以通过该字段,来定义数据类型等等。
属性
属性支持的类型有String, boolean, byte, double, int, long, or float.
分为三类,应用程序特定属性,JMS定义属性,中间件提供商属性。
应用程序特定属性
由开发人员设置,通过message设置
message.setStringProperty("username",username);更多的类型设置和JDBC很像。
另外setObjectProperty() and getObjectProperty()两个方法,只能设置原生类或者对应的封装类,以及String,其他的无法传递。消息发送后,无法修改,如果修改会抛出MessageNotWriteableException。当然可以通过调用clearProperties方法,来清除属性,清除后可以进行修改。
JMS定义的属性
• JMSXUserID
• JMSXAppID
• JMSXProducerTXID
• JMSXConsumerTXID
• JMSXRcvTimestamp
• JMSXDeliveryCount
• JMSXState
• JMSXGroupID
• JMSXGroupSeq
JMSXGroupID and JMSXGroupSeq
这两个属性,根据JMS标准,JMS中间件必须实现的,其他可选。
中间件供应商提供的属性
根据供应商自己决定。
消息
TextMessage, StreamMessage, MapMessage, ObjectMessage, and BytesMessage
这六种类型是必须实现的。
Message类型是基础接口,session提供createMessage();该方法返回一个只有头‘,属性,但内容是空的消息。
消息发送后,会变成只读,可以通过clearBody,使得重新可以写。
客户确认模式
TopicSession topic =
topicConnection.createTopicSession(false, Session.CLIENT_ACKNOWLEDGE);
当使用该模式,那么收到消息后,需要明确告诉JMS,消息被收到。message.acknowledge();
Message
消息由三部分组成
头,属性和内容。
头
所有获取头内容的方法都一getJMSXxx命名。
大致定义如下
public interface Message { static final int DEFAULT_DELIVERY_MODE = DeliveryMode.PERSISTENT; static final int DEFAULT_PRIORITY = 4; static final long DEFAULT_TIME_TO_LIVE = 0; String getJMSMessageID() throws JMSException; void setJMSMessageID(String id) throws JMSException; long getJMSTimestamp() throws JMSException; void setJMSTimestamp(long timestamp) throws JMSException; byte[] getJMSCorrelationIDAsBytes() throws JMSException; void setJMSCorrelationIDAsBytes(byte[] correlationID) throws JMSException; void setJMSCorrelationID(String correlationID) throws JMSException; String getJMSCorrelationID() throws JMSException; Destination getJMSReplyTo() throws JMSException; void setJMSReplyTo(Destination replyTo) throws JMSException; Destination getJMSDestination() throws JMSException; void setJMSDestination(Destination destination) throws JMSException; int getJMSDeliveryMode() throws JMSException; void setJMSDeliveryMode(int deliveryMode) throws JMSException; boolean getJMSRedelivered() throws JMSException; void setJMSRedelivered(boolean redelivered) throws JMSException; String getJMSType() throws JMSException; void setJMSType(String type) throws JMSException; long getJMSExpiration() throws JMSException; void setJMSExpiration(long expiration) throws JMSException; int getJMSPriority() throws JMSException; void setJMSPriority(int priority) throws JMSException; void clearProperties() throws JMSException; boolean propertyExists(String name) throws JMSException; boolean getBooleanProperty(String name) throws JMSException; byte getByteProperty(String name) throws JMSException; short getShortProperty(String name) throws JMSException; int getIntProperty(String name) throws JMSException; long getLongProperty(String name) throws JMSException; float getFloatProperty(String name) throws JMSException; double getDoubleProperty(String name) throws JMSException; String getStringProperty(String name) throws JMSException; Object getObjectProperty(String name) throws JMSException; Enumeration getPropertyNames() throws JMSException; void setBooleanProperty(String name, boolean value) throws JMSException; void setByteProperty(String name, byte value) throws JMSException; void setShortProperty(String name, short value) throws JMSException; void setIntProperty(String name, int value) throws JMSException; void setLongProperty(String name, long value) throws JMSException; void setFloatProperty(String name, float value) throws JMSException; void setDoubleProperty(String name, double value) throws JMSException; void setStringProperty(String name, String value) throws JMSException; void setObjectProperty(String name, Object value) throws JMSException; void acknowledge() throws JMSException; void clearBody() throws JMSException; }
其中消息头分为两类,一类是自动分配的,一类是开发人员指定的,大多数是自动分配。
获取消息头一般通过Message对象就可以获取
设置消息头,自动类则大多是通过发送者设置。非自动类头则通过message对象设置。
JMSDestination
该头信息用来标示来源,是一个Topic或者Queue对象。
JMSDeliveryMode
信息交付模式,分为永久的和非永久的,永久的情况,jms收到消息,就持久化,防止丢失,而非永久的JMS中间件要是挂了,就呵呵吧。
int deliverymode = message.getJMSDeliveryMode();
if (deliverymode == javax.jms.DeliveryMode.PERSISTENT) {
...
} else { // equals DeliveryMode.NON_PERSISTENT
...
}
如上方式可以判断是否永久。
设置非永久性消息是发送者设置的。
TopicPublisher topicPublisher = topicSession.createPublisher(topic);
topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
JMSMessageID
消息ID,唯一标示,在做历史库信息的时候很有用。
String messageid = message.getJMSMessageID();
JMSTimestamp
长整型,而不是时间形,用来确定中间件收到的时间(不是发送者发送的时间)。
long timestamp = message.getJMSTimestamp();
JMSExpiration
消息过期时间。
long timeToLive = message.getJMSExpiration();
,也是通过发送者设置过期时间
topicPublisher.setTimeToLive(3600000);。
0的时候,不会过期。
JMSRedelivered
是否重新发送boolean isRedelivered = message.getJMSRedelivered()
JMSPriority
设置优先级0-4是正常级别,5-9是高优先级别,
int priority = message.getJMSPriority();
TopicPublisher topicPublisher = TopicSession.createPublisher(someTopic);
topicPublisher.setPriority(9);
另外消息发送出去后,setPriority将会被忽略。
JMSReplyTo
一些情况下,需要再消费者收到消息后,进行回复
//消息生产者进行回复设置,需要定义一个Destination,来帮助消费者回复
message.setJMSReplyTo(topic);
//消息消费者
Topic topic = (Topic) message.getJMSReplyTo();//获取生产者的信息
JMSCorrelationID
对于需要回复的情况下,该值会与发送者的消息的MessageId相同,来表示对哪个消息回复。当然也不是必须相同
JMSType
程序员可以通过该字段,来定义数据类型等等。
属性
属性支持的类型有String, boolean, byte, double, int, long, or float.
分为三类,应用程序特定属性,JMS定义属性,中间件提供商属性。
应用程序特定属性
由开发人员设置,通过message设置
message.setStringProperty("username",username);更多的类型设置和JDBC很像。
另外setObjectProperty() and getObjectProperty()两个方法,只能设置原生类或者对应的封装类,以及String,其他的无法传递。消息发送后,无法修改,如果修改会抛出MessageNotWriteableException。当然可以通过调用clearProperties方法,来清除属性,清除后可以进行修改。
JMS定义的属性
• JMSXUserID
• JMSXAppID
• JMSXProducerTXID
• JMSXConsumerTXID
• JMSXRcvTimestamp
• JMSXDeliveryCount
• JMSXState
• JMSXGroupID
• JMSXGroupSeq
JMSXGroupID and JMSXGroupSeq
这两个属性,根据JMS标准,JMS中间件必须实现的,其他可选。
中间件供应商提供的属性
根据供应商自己决定。
消息
TextMessage, StreamMessage, MapMessage, ObjectMessage, and BytesMessage
这六种类型是必须实现的。
Message类型是基础接口,session提供createMessage();该方法返回一个只有头‘,属性,但内容是空的消息。
消息发送后,会变成只读,可以通过clearBody,使得重新可以写。
客户确认模式
TopicSession topic =
topicConnection.createTopicSession(false, Session.CLIENT_ACKNOWLEDGE);
当使用该模式,那么收到消息后,需要明确告诉JMS,消息被收到。message.acknowledge();
发表评论
-
activemq in action 翻译
2014-11-20 10:45 856http://jackyin5918.iteye.com/ca ... -
高并发
2014-11-16 21:58 1596垂直扩展 垂直扩展是一种用于增加单个ActiveMQ代理连接数 ... -
删除不活动的队列(Delete Inactive Destinations)
2014-11-16 16:41 1352一般情况下,ActiveMQ的queue在不使用之后,可以通过 ... -
代理网络中消息传递
2014-11-13 21:21 791常见的方式是让所有客户端都连接到一个中心代理,而这不是使用消息 ... -
企业部署
2014-11-13 14:26 689主从备份方式 多个代理 ... -
REST和AJAX
2014-11-12 17:01 789REST 通过activemq提供的servlet < ... -
安全机制
2014-10-15 15:22 1248ActiveMQ中所有安全相关的概念都是通过插件的形式实现的. ... -
与spring结合
2014-10-15 14:06 791在Spring中嵌入ActiveMQ有四种方式:纯Spring ... -
activemq 消息存储
2014-10-13 17:03 2341JMS规范支持两种方式分发消息:持久化和非持久化。Active ... -
ActiveMQ配置 连接activemq
2014-10-08 10:13 39061activemq代理 JMS代理(如ActiveMQ bro ... -
ActiveMQ简介
2014-10-08 09:49 775支持跨平台跨语言等特点,由于它是用JAVA实现的一套中间件,跨 ... -
jms-spring
2014-09-30 10:37 935同步接收和同步发送的情况(使用JNDI) 异步接收消息 ... -
jms-事物
2014-09-29 16:52 682JMSRedelivered可以检查消 ... -
过滤器与消息选择器
2014-09-28 23:08 705过滤器 String filter = &quo ... -
发布订阅模式
2014-09-28 11:52 1025特点 1.通过话题通道进行交互。 2.可以有多个订阅者,订阅者 ... -
jms-点对点
2014-09-27 23:45 984在点对点模式中,消息创建者称为发送者,消息消费者称为接收者。 ... -
jms基础,与例子
2014-09-24 22:14 1014MOM,面向消息中间件的交互模式 各个系统间,可以认为 ... -
jms的两种模式
2014-09-23 22:49 2275JMS有两种通信方式 P2P,点对点 方式和 发布/订阅模式P ...
相关推荐
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它提供了一种可靠的消息传递机制,允许应用程序创建、发送、接收和读取消息。`jms-1.1.jar` 是一个包含了JMS 1.1...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准接口。JMS 1.1是其一个重要的版本,它为分布式系统中的应用程序提供了一种可靠的消息传递机制,使得应用程序可以在...
4. **消息类型**:JMS定义了四种消息类型:`TextMessage`(文本消息)、`ObjectMessage`(序列化Java对象)、`BytesMessage`(字节流)和`MapMessage`(键值对形式的数据)。 5. **事务管理**:JMS支持两种事务模式...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的一种标准API,它为应用程序提供了创建、发送、接收和读取消息的标准接口。"jms-1_1-fr-apidocs.zip"是一个包含JMS 1.1规范的API文档...
首先,Spring JMS是Spring Framework中的一个模块,它提供了一种简洁、面向对象的方式来访问JMS API,简化了消息生产者和消费者的实现。在Spring的配置文件中,开发者可以轻松定义消息模板、监听容器和消息驱动的...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中传递消息的标准API,它为应用程序提供了一种可靠的消息传递机制。"jms-1_0_2-upd-sampleprograms.zip"是一个压缩包,其中包含了一系列...
JMS(Java Message Service)是Java平台中用于企业级应用之间进行异步消息传递的一种标准API。在JMS 1.1版本中,它提供了一套接口和模型,使得开发人员能够创建、发送、接收和读取消息。JMS允许应用程序在不关心彼此...
- **Stomp协议**:了解其基本结构和命令,如SEND、SUBSCRIBE、MESSAGE、ACK等。 - **JMS概念**:理解主题和队列的区别,以及如何选择合适的消息模式。 - **PHP的Stomp库**:研究如何安装和使用`StompClient`或类似库...
首先,我们来看JMS(Java Message Service)-1.1.jar。JMS是Java平台上的一个标准API,用于在分布式环境中发送和接收消息。Log4j可以利用JMS Appender将日志信息发送到消息队列,这样就可以实现日志的集中管理和分发...
Message接口有多种子接口,如TextMessage用于文本消息,ObjectMessage用于Java对象,BytesMessage用于二进制数据等。 2. **Destination**:目的地接口代表消息的发送和接收地点,分为Queue(队列)和Topic(主题)...
JMS(Java Message Service)是Java平台中关于面向消息中间件(MOM)的标准API,它允许应用程序组件生成、发送、接收和读取消息。它旨在促进分布式系统中的组件之间松散耦合、可靠且高效的信息交流。本文档旨在详细...
JMS(Java Message Service)是Java平台中用于消息传递的标准API,它提供了在分布式环境中进行异步通信的能力。ActiveMQ 是一个流行的开源JMS提供者,它支持多种协议,如AMQP、STOMP和OpenWire等。 在"Apache Camel...
Java JMS(Java Message Service)是Java平台中用于在分布式环境中进行异步消息传递的标准API。JMS允许应用程序创建、发送、接收和读取消息,有效地支持企业级应用之间的通信。在这个“Lab2-JMS-code_jms_brainhht_...
- JNDI:JMS客户端通过JNDI(Java Naming and Directory Interface)查找并使用JMS对象,如ConnectionFactory和Destination。 2. JMS编程模型: - ConnectionFactory:这是用于创建Connection的工厂类,通常在jms...
这里我们关注的是两个特定的JAR文件:`javax.jms.jar`和`servlet-api.jar`,它们分别与Java消息服务(Java Message Service,JMS)和Java Servlet API相关。 **Java消息服务(JMS)**是Java平台上的一个标准接口,...
标题 "Laravel开发-jms-format-laravel .zip" 暗示了这是一个关于使用 Laravel 框架进行开发的项目,其中可能包含了JMS(Java Message Service)格式的相关实现。Laravel 是一个流行的PHP框架,它提供了优雅的方式来...
6. 发送和接收消息:使用Message对象封装数据,并通过生产者发送;消费者从目的地接收消息。 7. 关闭资源:完成操作后,记得关闭会话、连接和其他资源,以释放系统资源。 在“jms-test”项目中,可能包含了实现这两...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于创建、发送、接收和阅读消息的应用程序接口。它为应用程序提供了标准的接口,可以跨越多种消息中间件产品进行通信。JMS允许在分布式环境中交换异步...
Java消息服务(JMS,Java Message Service)是Java平台中用于企业级应用集成(EAI)的一种标准API,它提供了一种可靠的消息传递机制,使得应用程序可以在分布式环境中交换消息。JMS允许应用程序创建、发送、接收和...