jms有2种消息发送模式,点对点的,和发布订阅型,如果你期待接收方有回馈,来完成一个
操作如:订购一件物品。应该使用点对点,如果是日志记录,可能有多个记录器,则使用发
布订阅。
消息分为持久性的和非持久性的,订阅者也分持久性的和非持久性的。
(持久的消息在出现故障时 JMS提供者会存储消息,订阅者持久性的是在订阅者不可用时,jms缓存消息,到可用时在发送给订阅者)
jms过滤有2中类型,一种基于消息的,一种基于地址的
下面代码为基于消息过滤器的简单用法:
发送器:
package ch06;
import java.util.Scanner;
import java.util.StringTokenizer;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* MessageFilter Test....
*
* @version 2010-10-25 上午11:44:15
* @author DaWei han
* @EMAIL handawei_1@126.com
*/
public class QueueSender {
public QueueSender() {
try {
InitialContext context = new InitialContext();
factory = (QueueConnectionFactory) context
.lookup("ConnectionFactory");
con = factory.createQueueConnection();
session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
requestQueue = (Queue) context.lookup("jms/RequestQueue");
con.start();
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
public void senMessage(String message, Integer propr) {
try {
TextMessage msg = session.createTextMessage();
msg.setText("the message is :" + message + " and the propry is :"
+ propr);
msg.setIntProperty("level", propr);
javax.jms.QueueSender sender = session.createSender(requestQueue);
sender.send(msg);
} catch (JMSException e) {
e.printStackTrace();
}
}
public void close() {
try {
con.close();
} catch (JMSException e) {
e.printStackTrace();
}
System.exit(0);
}
/**
* @param args
*/
public static void main(String[] args) {
QueueSender sender = new QueueSender();
System.out.println("Please enter the message to send eg:50,2");
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String line = in.nextLine();
if ("".equals(line) || "exit".equals(line)) {
sender.close();
}
StringTokenizer tokenizer = new StringTokenizer(line, ",");
sender.senMessage(tokenizer.nextToken(), Integer.valueOf(tokenizer
.nextToken()));
}
}
private Queue requestQueue;
private QueueConnection con;
private QueueConnectionFactory factory;
private QueueSession session;
}
接收器:
package ch06;
import java.util.Scanner;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* MessageFilter Test
*
* @version 2010-10-25 上午11:44:42
* @author DaWei han
* @EMAIL handawei_1@126.com
*/
public class QueueReciver01 implements MessageListener {
public QueueReciver01() {
try {
InitialContext context = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) context
.lookup("ConnectionFactory");
con = factory.createQueueConnection();
session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
requestQueue=(Queue) context.lookup("jms/RequestQueue");
con.start();
String filter="level BETWEEN 1 AND 3";
receiver = session.createReceiver(requestQueue,filter);
receiver.setMessageListener(this);
System.out.println("Reciver01 waiting the message.......");
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
QueueReciver01 reciver = new QueueReciver01();
System.out.println("press the Enter to Exit.");
Scanner in = new Scanner(System.in);
in.nextLine();
System.exit(1);
}
public void onMessage(Message arg0) {
try {
TextMessage msg = (TextMessage) arg0;
System.out.println("the message is :" + msg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
private QueueReceiver receiver;
private QueueConnection con;
private Queue requestQueue;
private QueueSession session;
}
基于jboss容器。
分享到:
相关推荐
在这个"activemq demo,过滤器demo"中,我们将探讨如何使用ActiveMQ进行消息传递,并利用其过滤功能来定制消息路由。 首先,让我们了解ActiveMQ的基本概念。在ActiveMQ中,生产者(Producer)发送消息到一个或多个...
12. **选择器(Selector)**:在发布/订阅模型中,消费者可以通过选择器过滤收到的消息,只接收满足特定条件的消息。 总的来说,JMS1.1规范为Java开发者提供了一套统一的API,便于在分布式系统中构建可靠的、基于...
5. **FilterChain**: 过滤器链,用于按顺序调用一系列过滤器。 6. **ServletContext**: 提供了整个Web应用程序的上下文信息,如全局初始化参数和资源。 这两个JAR文件通常在开发Java Web应用时会用到,特别是当应用...
- **消息选择**: 允许消费者根据特定条件过滤消息。 #### 五、JMS的架构与组件 - **架构**: JMS定义了一个基于客户端-服务器模型的架构,包括客户端、消息中间件和服务端。 - **组件**: - **ConnectionFactory**:...
- 消费者可以使用消息选择器来过滤接收到的消息,只处理满足特定条件的消息。 JMS是Java开发者在设计分布式系统时的重要工具,通过理解并熟练掌握JMS,你可以构建出高效、可靠的分布式应用。"JMS简明教程.pdf"这份...
- **消息选择:** JMS支持基于消息属性的选择器,允许客户端根据特定条件筛选消息。 #### 四、JMS公共工具 - **受管理的对象:** JMS定义了一些受管理的对象,如目的地(Destination)和连接工厂...
- **消息选择器**:消费者可以使用消息选择器过滤接收的消息,只处理满足特定条件的消息。 - **消息组**:允许将消息分组,确保同组内的消息按顺序处理。 - **消息优先级**:消息可以设置优先级,高优先级的消息...
4. **消息选择器**:允许消费者根据特定条件过滤接收到的消息。 三、SUN JMS 1.1规范 SUN JMS 1.1是JMS的一个早期版本,它定义了JMS接口的详细规范,包括连接工厂、会话、消息生产者、消息消费者、消息和目的地等...
此外,Spring JMS还提供了对消息选择器的支持,允许我们基于消息头的属性来过滤消息。这在处理多消费者场景时非常有用,可以根据消息类型分配给特定的消费者。 总的来说,Spring JMS通过提供统一的API和工具类,...
7. **消息选择器**: 如果需要,消费者还可以使用消息选择器来过滤接收到的消息。例如,只接收满足特定条件(如消息头属性)的消息。 8. **事务管理**: JMS还支持事务,确保消息的可靠传递。生产者可以将一组消息放...
6. **消息选择器**:如何使用消息选择器来过滤接收的消息,只处理符合特定条件的消息。 7. **故障转移和高可用性**:了解JMS服务器如何确保高可用性和故障恢复机制。 8. **最佳实践**:包括如何设计健壮的JMS应用,...
除了基本的JMS操作,你还将接触到高级功能,比如消息的事务处理、消息选择器(用于过滤接收到的消息)、消息组(让消息在一组消费者之间分发)以及DLQ(死信队列)管理,这些都是在实际应用中非常重要的功能。...
消息选择器允许基于消息头中的属性过滤消息,只接收满足条件的消息。 **4. JMS Pub/Sub编程** 编程模式与P2P类似,但使用TopicConnection和TopicSession,创建TopicPublisher发送消息,TopicSubscriber接收消息。 ...
消息属性可用于存储消息相关的附加信息,例如,用于过滤消息的选择器(Selector)就依赖于属性值。属性名应遵循一定的命名规则,而属性值可以是多种数据类型,如字符串、整数、布尔值等。通过属性迭代,开发者可以...
5. **JMS特性**:包括消息选择器、消息头和属性的使用,这些可以帮助精细化消息过滤和路由。 6. **实践案例**:教程可能会提供实际的编程示例,展示如何在Java应用程序中集成JMS,实现不同应用间的通信。 **JMS源...
10. **消息选择器**:允许消费者根据特定条件过滤接收到的消息。 11. **事务管理**:在会话上开启事务,可以确保一组消息作为一个单元提交或回滚。 12. **连接池**:为了提高性能和效率,JMS实现通常包含连接池,...
7. **消息选择器**:在发布/订阅模型中,使用消息选择器过滤接收到的消息,只消费满足特定条件的消息。 8. **消息监听器**:注册MessageListener以实现异步消息处理,提高系统性能。 **工具和教程** 压缩包中的...
- **可选消息过滤**:订阅者可以设置过滤器,只接收满足条件的消息。 **ActiveMQ**是Apache软件基金会开发的一款开源消息中间件,实现了JMS标准,提供了对点对点和发布/订阅模型的支持。ActiveMQ具备以下特性: 1. ...