`

jms过滤器

    博客分类:
  • jms
阅读更多

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容器。

分享到:
评论

相关推荐

    activimq demo,过滤器demo

    在这个"activemq demo,过滤器demo"中,我们将探讨如何使用ActiveMQ进行消息传递,并利用其过滤功能来定制消息路由。 首先,让我们了解ActiveMQ的基本概念。在ActiveMQ中,生产者(Producer)发送消息到一个或多个...

    JMS1.1规范(中文)

    12. **选择器(Selector)**:在发布/订阅模型中,消费者可以通过选择器过滤收到的消息,只接收满足特定条件的消息。 总的来说,JMS1.1规范为Java开发者提供了一套统一的API,便于在分布式系统中构建可靠的、基于...

    javax包下的javax.jms.jar及servlet-api.jar

    5. **FilterChain**: 过滤器链,用于按顺序调用一系列过滤器。 6. **ServletContext**: 提供了整个Web应用程序的上下文信息,如全局初始化参数和资源。 这两个JAR文件通常在开发Java Web应用时会用到,特别是当应用...

    JMS的中文教程(Java的消息驱动)

    - **消息选择**: 允许消费者根据特定条件过滤消息。 #### 五、JMS的架构与组件 - **架构**: JMS定义了一个基于客户端-服务器模型的架构,包括客户端、消息中间件和服务端。 - **组件**: - **ConnectionFactory**:...

    JMS 开发简明教程

    - 消费者可以使用消息选择器来过滤接收到的消息,只处理满足特定条件的消息。 JMS是Java开发者在设计分布式系统时的重要工具,通过理解并熟练掌握JMS,你可以构建出高效、可靠的分布式应用。"JMS简明教程.pdf"这份...

    JMS 中文 规范

    - **消息选择:** JMS支持基于消息属性的选择器,允许客户端根据特定条件筛选消息。 #### 四、JMS公共工具 - **受管理的对象:** JMS定义了一些受管理的对象,如目的地(Destination)和连接工厂...

    jboss-jms包

    - **消息选择器**:消费者可以使用消息选择器过滤接收的消息,只处理满足特定条件的消息。 - **消息组**:允许将消息分组,确保同组内的消息按顺序处理。 - **消息优先级**:消息可以设置优先级,高优先级的消息...

    JMS标准规范培训教程

    4. **消息选择器**:允许消费者根据特定条件过滤接收到的消息。 三、SUN JMS 1.1规范 SUN JMS 1.1是JMS的一个早期版本,它定义了JMS接口的详细规范,包括连接工厂、会话、消息生产者、消息消费者、消息和目的地等...

    SpringJMS源码

    此外,Spring JMS还提供了对消息选择器的支持,允许我们基于消息头的属性来过滤消息。这在处理多消费者场景时非常有用,可以根据消息类型分配给特定的消费者。 总的来说,Spring JMS通过提供统一的API和工具类,...

    JMS实现的信息的广播订阅

    7. **消息选择器**: 如果需要,消费者还可以使用消息选择器来过滤接收到的消息。例如,只接收满足特定条件(如消息头属性)的消息。 8. **事务管理**: JMS还支持事务,确保消息的可靠传递。生产者可以将一组消息放...

    jms-study.zip_jms_server jms

    6. **消息选择器**:如何使用消息选择器来过滤接收的消息,只处理符合特定条件的消息。 7. **故障转移和高可用性**:了解JMS服务器如何确保高可用性和故障恢复机制。 8. **最佳实践**:包括如何设计健壮的JMS应用,...

    activemq中间件视频 jms规范

    除了基本的JMS操作,你还将接触到高级功能,比如消息的事务处理、消息选择器(用于过滤接收到的消息)、消息组(让消息在一组消费者之间分发)以及DLQ(死信队列)管理,这些都是在实际应用中非常重要的功能。...

    JMS异步通信

    消息选择器允许基于消息头中的属性过滤消息,只接收满足条件的消息。 **4. JMS Pub/Sub编程** 编程模式与P2P类似,但使用TopicConnection和TopicSession,创建TopicPublisher发送消息,TopicSubscriber接收消息。 ...

    jms规范说明

    消息属性可用于存储消息相关的附加信息,例如,用于过滤消息的选择器(Selector)就依赖于属性值。属性名应遵循一定的命名规则,而属性值可以是多种数据类型,如字符串、整数、布尔值等。通过属性迭代,开发者可以...

    JMS规范培训教程、JMS源代码

    5. **JMS特性**:包括消息选择器、消息头和属性的使用,这些可以帮助精细化消息过滤和路由。 6. **实践案例**:教程可能会提供实际的编程示例,展示如何在Java应用程序中集成JMS,实现不同应用间的通信。 **JMS源...

    java 的Jms开源项目的源代码

    10. **消息选择器**:允许消费者根据特定条件过滤接收到的消息。 11. **事务管理**:在会话上开启事务,可以确保一组消息作为一个单元提交或回滚。 12. **连接池**:为了提高性能和效率,JMS实现通常包含连接池,...

    JMS Southbound 指南 jms_southbound_tutorial

    7. **消息选择器**:在发布/订阅模型中,使用消息选择器过滤接收到的消息,只消费满足特定条件的消息。 8. **消息监听器**:注册MessageListener以实现异步消息处理,提高系统性能。 **工具和教程** 压缩包中的...

    JMS之ActiveMQ 点对点+发布/订阅

    - **可选消息过滤**:订阅者可以设置过滤器,只接收满足条件的消息。 **ActiveMQ**是Apache软件基金会开发的一款开源消息中间件,实现了JMS标准,提供了对点对点和发布/订阅模型的支持。ActiveMQ具备以下特性: 1. ...

Global site tag (gtag.js) - Google Analytics