- 浏览: 468115 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (371)
- Java (44)
- Flex (25)
- Design Pattern / UML (5)
- JVM (14)
- Software Engineer (4)
- Testing (30)
- Web Backend (60)
- Linux (7)
- Database (11)
- SOA (28)
- English (6)
- FX (5)
- SAP Support (25)
- SAP Development (5)
- SAP Impl & Oprn (8)
- Articles (15)
- Music (4)
- Recipe (14)
- Multi-thread (4)
- Lucene (2)
- CS basic / Algorithm (12)
- Tour (3)
- C C++ (21)
- Others (10)
- Code Repository C++ (1)
- Code Repository Java (1)
- Code Repository Algorithm (1)
- Code Repository SQL (1)
- Web Frontend (4)
最新评论
-
xiangxm:
Java 强引用、 软引用、 弱引用、虚引用 -
nml-lyb:
123
Mule 的第一个例子 -
nml-lyb:
http://www.baidu.com
Mule 的第一个例子 -
white___ant:
...
Java 强引用、 软引用、 弱引用、虚引用 -
joeyon:
...
Java NIO介绍
深入掌握JMS(一):JMS基础
http://blog.csdn.net/zhangxs_3/archive/2009/03/29/4034713.aspx
深入掌握JMS(二):一个JMS例子
http://www.360doc.com/content/090712/20/18042_4241651.html
深入掌握JMS(三):MessageListener
http://www.ruanko.com:9090/uchome/space.php?uid=727&do=blog&id=7726
深入掌握JMS(四):实战Queue
http://www.360doc.com/content/090712/20/18042_4241594.html
深入掌握JMS(五):实战Topic
http://www.360doc.com/content/090712/20/18042_4241563.html
深入掌握JMS(六):消息头
http://www.ruanko.com:9090/uchome/space.php?uid=727&do=blog&id=7731
深入掌握JMS(七):DeliveryMode 例子
http://www.360doc.com/content/090712/20/18042_4241426.html
深入掌握JMS(八):JMSReplyTo
http://www.360doc.com/content/090712/20/18042_4241367.html
深入掌握JMS(九):Selector
http://www.360doc.com/content/090712/20/18042_4241298.html
深入掌握JMS(十):JMSCorrelationID&Selector
http://www.360doc.com/content/090712/20/18042_4241252.html
深入掌握JMS(十一):TemporaryQueue&TemporaryTopic
http://www.360doc.com/content/090712/21/18042_4241975.html
深入掌握JMS(十二):MDB
http://www.360doc.com/content/090712/21/18042_4242116.html
jms服务器是 apache-activemq-5.2.0
需要倒入的包有 activemq-all-5.2.0.jar
http://www.360doc.com/content/090712/20/18042_4241298.html
Example 1
ConnectionFactory---->Connection--->Session--->Message
Destination + Session------------------------------------>Producer
Destination + Session------------------------------------>MessageConsumer
首先需要得到ConnectionFactoy和Destination,这里创建一个一对一的Queue作为Destination。
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Queue queue = new ActiveMQQueue("testQueue");
然后又ConnectionFactory创建一个Connection, 再启动这个Connection:
Connection connection = factory.createConnection();
connection.start();
接下来需要由Connection创建一个Session:
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE)
现在暂且不用管参数的含义, 以后会详细讲到.
下面就可以创建Message了,这里创建一个TextMessage。
Message message = session.createTextMessage("Hello JMS!");
要想把刚才创建的消息发送出去,需要由Session和Destination创建一个消息生产者:
MessageProducer producer = session.createProducer(queue);
下面就可以发送刚才创建的消息了:
producer.send(message);
消息发送完成之后,我们需要创建一个消息消费者来接收这个消息:
MessageConsumer comsumer = session.createConsumer(queue);
Message recvMessage = comsumer.receive();
消息消费者接收到这个消息之后,就可以得到它的内容:
System.out.println(((TextMessage)recvMessage).getText());
import javax.jms.Connection;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class MessageSendAndReceive {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Message message = session.createTextMessage("Hello JMS!");
MessageProducer producer = session.createProducer(queue);
producer.send(message);
System.out.println("Send Message Completed!");
MessageConsumer comsumer = session.createConsumer(queue);
Message recvMessage = comsumer.receive();
System.out.println(((TextMessage)recvMessage).getText());
}
}
Example 2 实战Queue
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class QueueTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
//
创建一个
Queue
Queue queue = new ActiveMQQueue("testQueue");
//
创建一个
Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//
注册消费者
1
MessageConsumer comsumer1 = session.createConsumer(queue);
comsumer1.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer1 get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//
注册消费者
2
MessageConsumer comsumer2 = session.createConsumer(queue);
comsumer2.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer2 get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//
创建一个生产者,然后发送多个消息。
MessageProducer producer = session.createProducer(queue);
for(int i=0; i<10; i++){
producer.send(session.createTextMessage("Message:" + i));
}
}
}
运行这个例子会得到下面的输出结果:
Consumer1 get Message:0
Consumer2 get Message:1
Consumer1 get Message:2
Consumer2 get Message:3
Consumer1 get Message:4
Consumer2 get Message:5
Consumer1 get Message:6
Consumer2 get Message:7
Consumer1 get Message:8
Consumer2 get Message:9
可以看出每个消息直被消费了一次,但是如果有多个消费者同时监听一个
Queue
的话,无法确定一个消息最终会被哪一个消费者消费。
Example 3 实战 Topic
mport javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTopic;
public class TopicTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
//
创建一个
Topic
Topic topic= new ActiveMQTopic("testTopic");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//
注册消费者
1
MessageConsumer comsumer1 = session.createConsumer(topic);
comsumer1.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer1 get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//
注册消费者
2
MessageConsumer comsumer2 = session.createConsumer(topic);
comsumer2.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer2 get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//
创建一个生产者,然后发送多个消息。
MessageProducer producer = session.createProducer(topic);
for(int i=0; i<10; i++){
producer.send(session.createTextMessage("Message:" + i));
}
}
}
运行后得到下面的输出结果:
Consumer1 get Message:0
Consumer2 get Message:0
Consumer1 get Message:1
Consumer2 get Message:1
Consumer1 get Message:2
Consumer2 get Message:2
Consumer1 get Message:3
Consumer2 get Message:3
Consumer1 get Message:4
Consumer2 get Message:4
Consumer1 get Message:5
Consumer2 get Message:5
Consumer1 get Message:6
Consumer2 get Message:6
Consumer1 get Message:7
Consumer2 get Message:7
Consumer1 get Message:8
Consumer2 get Message:8
Consumer1 get Message:9
Consumer2 get Message:9
说明每一个消息都会被所有的消费者消费。
消息头
一个消息对象分为三部分:消息头 (Headers) ,属性( Properties )和消息体( Payload )。对于 StreamMessage 和 MapMessage ,消息本身就有特定的结构,而对于 TextMessage , ObjectMessage 和 BytesMessage 是无结构的。 一个 消息可以包含一些重要的数据或者仅仅是一个事件的通知。
消息的 Headers 部分通常包含一些消息的描述信息,它们都是标准的描述信息。包含下面一些值:
JMSDestination
消息的目的地,
Topic
或者是
Queue
。
JMSDeliveryMode
消息的发送模式:
persistent
或
nonpersistent
。
前者表示消息在被消费之前,如果
JMS
提供者
DOWN
了,重新启动后消息仍然存在。后者在这种情况下表示消息会被丢失。可以通过下面的方式设置:
Producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
JMSTimestamp
当调用
send()
方法的时候,
JMSTimestamp
会被自动设置为当前事件。可以通过下面方式得到这个值:
long timestamp = message.getJMSTimestamp();
JMSExpiration
表示一个消息的有效期。只有在这个有效期内,消息消费者才可以消费这个消息。默认值为
0
,表示消息永不过期。可以通过下面的方式设置:
producer.setTimeToLive(3600000); //
有效期
1
小时
(
1000
毫秒
* 60
秒
* 60
分)
JMSPriority
消息的优先级。
0-4
为正常的优先级,
5-9
为高优先级。可以通过下面方式设置:
producer.setPriority(9);
JMSMessageID
一个字符串用来唯一标示一个消息。
JMSReplyTo
有时消息生产者希望消费者回复一个消息,
JMSReplyTo
为一个
Destination
,表示需要回复的目的地。当然消费者可以不理会它。
JMSCorrelationID
通常用来关联多个
Message
。例如需要回复一个消息,可以把
JMSCorrelationID
设置为所收到的消息的
JMSMessageID
。
JMSType
表示消息体的结构,和
JMS
提供者有关。
JMSRedelivered
如果这个值为
true
,表示消息是被重新发送了。因为有时消费者没有确认他已经收到消息或者
JMS
提供者不确定消费者是否已经收到。
除了
Header
,消息发送者可以添加一些属性
(Properties)
。这些属性可以是应用自定义的属性,
JMS
定义的属性和
JMS
提供者定义的属性。我们通常只适用自定义的属性。
后面会讲到这些
Header
和属性的用法。
Example 4 DeliveryMode 例子
在下面的例子中,分别发送一个 Persistent 和 nonpersistent 的消息,然后关闭退出 JMS 。
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class DeliveryModeSendTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
producer.send(session.createTextMessage("A persistent Message"));
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
producer.send(session.createTextMessage("A non persistent Message"));
System.out.println("Send messages sucessfully!");
}
}
运行上面的程序,当输出“
Send messages sucessfully!”
时,说明两个消息都已经发送成功,然后我们结束它,来停止
JMS Provider
。
接下来我们重新启动
JMS Provicer
,然后添加一个消费者:
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class DeliveryModeReceiveTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer comsumer = session.createConsumer(queue);
comsumer.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
运行上面的程序,可以得到下面的输出结果:
Consumer get A persistent Message
可以看出消息消费者只接收到一个消息,它是一个
Persistent
的消息。而刚才发送的
non persistent
消息已经丢失了。
另外
,
如果发送一个
non persistent
消息
,
而刚好这个时候没有消费者在监听
,
这个消息也会丢失
.
Example 5 JMSReplyTo
在下面的例子中,首先创建两个
Queue
,发送者给一个
Queue
发送,接收者接收到消息之后给另一个
Queue
回复一个
Message
,然后再创建一个消费者来接受所回复的消息。
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class MessageSendReceiveAndReply {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
//
消息发送到这个
Queue
Queue queue = new ActiveMQQueue("testQueue");
//
消息回复到这个
Queue
Queue replyQueue = new ActiveMQQueue("replyQueue");
final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//
创建一个消息,并设置它的
JMSReplyTo
为
replyQueue
。
Message message = session.createTextMessage("Andy");
message.setJMSReplyTo(replyQueue);
MessageProducer producer = session.createProducer(queue);
producer.send(message);
//
消息的接收者
MessageConsumer comsumer = session.createConsumer(queue);
comsumer.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
//
创建一个新的
MessageProducer
来发送一个回复消息。
MessageProducer producer = session.createProducer(m.getJMSReplyTo());
producer.send(session.createTextMessage("Hello " + ((TextMessage) m).getText()));
} catch (JMSException e1) {
e1.printStackTrace();
}
}
});
//
这个接收者用来接收回复的消息
MessageConsumer comsumer2 = session.createConsumer(replyQueue);
comsumer2.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println(((TextMessage) m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
首先消息生产者发送一个消息,内容为“
Andy”
,
然后消费者收到这个消息之后根据消息的
JMSReplyTo
,回复一个消息,内容为“
Hello Andy‘
。
最后在回复的
Queue
上创建一个接收回复消息的消费者,它输出所回复的内容。
运行上面的程序,可以得到下面的输出结果:
Hello Andy
深入掌握JMS(九)
前面的例子中创建一个消息消费者使用的是:
sesssion
.createConsumer(destination)
另外,还提供了另一种方式:
sesssion
.createConsumer(destination, selector)
这里selector是一个字符串,用来过滤消息。也就是说,这种方式可以创建一个可以只接收特定消息的一个消费者。
Selector的格式是类似于SQL-92的一种语法。可以用来比较消息头信息和属性。
package test.jms;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class JMSSelectorTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer comsumerA = session.createConsumer(queue, "receiver = 'A'");
comsumerA.setMessageListener(new MessageListener() {
public void onMessage(Message m) {
try {
System.out.println("ConsumerA get " + ((TextMessage) m).getText());
} catch (JMSException e1) {
}
}
});
MessageConsumer comsumerB = session.createConsumer(queue, "receiver = 'B'");
comsumerB.setMessageListener(new MessageListener() {
public void onMessage(Message m) {
try {
System.out.println("ConsumerB get " + ((TextMessage) m).getText());
} catch (JMSException e) {
}
}
});
MessageProducer producer = session.createProducer(queue);
for (int i = 0; i < 10; i++) {
String receiver = (i % 3 == 0 ? "A" : "B");
TextMessage message = session.createTextMessage("Message" + i + ", receiver:" + receiver);
message.setStringProperty("receiver", receiver);
producer.send(message);
}
}
}
输出结果为:
ConsumerA get Message0, receiver:A ConsumerB get Message1, receiver:B ConsumerB get Message2, receiver:B ConsumerA get Message3, receiver:A ConsumerB get Message4, receiver:B ConsumerB get Message5, receiver:B ConsumerA get Message6, receiver:A ConsumerB get Message7, receiver:B ConsumerB get Message8, receiver:B ConsumerA get Message9, receiver:A
发表评论
-
java8 Stream Lazy 解释 (非实现原理)
2015-07-22 07:49 1584http://blog.csdn.net/dm_vincen ... -
java8 系列2 深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
2015-07-22 07:00 2481http://zh.lucida.me/blog/java ... -
java8 系列1 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
2015-07-22 06:58 1068http://zh.lucida.me/blog/java- ... -
Java 8 Stream探秘 具体实现
2015-07-22 06:31 896http://colobu.com/2014/11/18/J ... -
Arrays.asList() 的了解
2015-07-21 23:05 1168为什么Arrays.asList() 返回的list是 i ... -
java8 Lambda expressions
2015-07-14 13:09 879The single most important chan ... -
java8 new features
2015-07-08 02:06 700http://www.javacodegeeks.com/2 ... -
ReentrantLock与synchronized
2014-09-02 23:34 550http://uule.iteye.com/blog/148 ... -
PriorityQueue的使用
2014-05-29 12:14 962http://blog.csdn.net/yangzhon ... -
java的移位操作详解,左移和右移 << >>, 补码计算
2014-04-17 10:28 808---------------------补码--- ... -
深入Java集合学习系列:ArrayList的实现原理
2014-02-13 09:04 566http://zhangshixi.iteye.com/bl ... -
java集合类 ------------ 实现 细节
2014-02-12 23:12 534深入Java集合学习系列:ArrayList的 ... -
两种简单的方式快速实现hashCode 和 equals方法
2014-02-04 10:46 647http://hi.baidu.com/coolcat_p ... -
集合类 Set
2013-12-30 03:50 504http://www.cnblogs.com/yuchao ... -
java1.5新特性
2013-10-23 10:59 6711.自动包装和解包(Autoboxing and unboxi ... -
正则表达式30分钟入门教程
2013-10-22 00:21 543http://blog.csdn.net/cumt168/a ... -
总结Java方法(函数)传值和传引用的问题
2013-09-16 08:38 614http://java.chinaitlab.com/bas ... -
有状态,无状态对象是什么概念
2013-06-21 06:00 1128http://blog.csdn.net/showwair/ ... -
Dom4j的使用(全而好的文章)
2013-06-09 21:12 541http://xhy0422.iteye.com/blog/ ... -
serialVersionUID 用来表明类的不同版本间的兼容性
2013-06-03 23:12 816http://blog.csdn.net/hulefei29 ...
相关推荐
### 深入掌握JMS——ActiveMQ 十一章 #### JMS基本概念与重要知识点解析 **JMS(Java Message Service)简介** JMS(Java消息服务)是一种广泛应用于企业级应用中的消息中间件协议,它为应用程序提供了一种高效、...
接着,**《深入掌握JMS》** 进一步探讨了JMS的高级特性,如消息选择器、消息组、消息优先级以及事务管理。这部分内容有助于读者解决更复杂的消息处理需求,例如实现特定条件的消息过滤,或者确保消息的有序处理。 *...
总之,无论你是初学者还是经验丰富的开发者,这个系列教程都将是你掌握ActiveMQ和JMS的宝贵资源。通过学习,你不仅可以提升自己的技术能力,还能为你的项目选择和实施消息队列解决方案提供有力的支持。所以,如果你...
《Java消息服务(JMS)1.0.2更新示例程序详解》 Java消息服务(Java Message Service,简称JMS)是Java平台中...无论你是初学者还是经验丰富的开发者,这些示例都提供了宝贵的实践经验,帮助你深入掌握JMS的核心概念。
### JMS -- J2EE培训材料 #### 一、引言 JMS(Java Message Service)是Java平台中关于面向消息中间件(MOM)的...掌握JMS的核心概念和技术可以帮助开发者更好地构建复杂的企业级应用,提高系统的灵活性和可扩展性。
#### 三、掌握JMS:核心概念与实践 - **JMS概述**:章节介绍了JMS的基本原理,包括点到点(P2P)和发布/订阅(Pub/Sub)两种消息模型,以及如何通过JMS与其他企业级Java API协同工作,如JNDI(Java命名和目录接口)...
通过深入学习这些内容,开发者可以掌握使用JMS构建高效、可靠的企业级应用程序的技巧,从而提升系统的性能和稳定性。无论你是初学者还是经验丰富的开发者,这个英文书合集都能为你的JMS学习之旅提供宝贵的资料。
通过这个视频系列,你不仅能够掌握ActiveMQ的基本操作,还能深入理解JMS规范,从而在实际项目中更有效地利用消息中间件进行解耦和异步通信。此外,了解ActiveMQ的性能调优和故障排查技巧也是提升系统稳定性的关键,...
**JMS(Java Messaging Service)1.1规范**是中国开发者卫建军基于原版英文资料进行汉化的成果,旨在帮助更多中文使用者更好地理解和掌握这一企业级消息传输标准。JMS作为一种在应用程序之间传递消息的标准API,其...
"tutorials"文件夹可能包含一系列逐步指导,从基础知识到高级概念,帮助开发者快速掌握JMS Southbound的使用。 总之,JMS Southbound指南是学习如何将应用程序连接到JMS提供者并有效地利用消息传递功能的重要资源。...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它允许应用程序创建、...《JMS简明教程》这本书应该会深入解释这些概念,并提供实践指导,帮助你更好地掌握JMS技术。
### 深入掌握J2EE编程技术的关键知识点 #### J2EE概述 J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为简化企业级应用开发而设计的一套标准和技术规范。它基于Java SE,并增加了许多面向企业级...
Spring JMS模块包括了一系列用于处理JMS的抽象类,如`JmsTemplate`,它简化了JMS的使用,提供了消息发送和接收的模板方法。此外,Spring还提供了对JMS资源的声明式事务管理,以及对连接工厂(ConnectionFactory)、...
本文将深入探讨如何使用Spring框架与ActiveMQ结合实现基于JMS的消息传递系统。 首先,理解JMS的基本概念至关重要。JMS定义了生产者(Producer)、消费者(Consumer)和消息队列(Queue)或主题(Topic)等核心组件...
这里我们将深入探讨这两个概念以及它们在实际应用中的作用。 首先,`JMS`是Java平台上的一个标准API,它允许应用程序创建、发送、接收和读取消息。消息传递是一种异步通信方式,通过解耦发送方和接收方,提高了系统...
### 深入掌握J2EE编程技术的关键知识点 #### J2EE概述 J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为简化企业级应用开发而设计的一套标准和技术规范。它基于Java SE,并增加了许多面向企业级...
### SUN JMS MQ 全书知识点总结 #### 1. 关于SUN Java System Message Queue (JMS MQ) ...这对于那些需要深入了解和掌握SUN Java System Message Queue 3.7 UR1版本的IT专业人士来说是非常宝贵的资源。
总之,本文系列将深入探讨如何使用IBM WebSphere ESB和JMS构建强大且可靠的SOA环境。通过学习和实践,读者将掌握如何部署和运行基于ESB的解决方案,以及如何利用JMS进行高效的消息传递,从而提升整个系统的性能和...
### WAS6培训资料:L08-WASv6_Service ...通过本实验的学习,参与者不仅能深入了解WAS v6在服务集成和JMS方面的能力,还能掌握如何配置和运行相关的资源和服务。这对于构建高性能、高可用性的分布式应用至关重要。
JMS规范教程则更深入地介绍了JMS规范的细节,可能涵盖规范中的核心概念、API接口、异常处理、事务管理、消息选择器等功能,帮助开发者深入理解JMS的工作原理和最佳实践。 总的来说,这些资源对于理解和掌握...