activeMQ之消息过滤

这两天在看activeMQ,之前用到过,但是没有很系统的去学习,今天看到里边有个消息过滤,之前不了解,这次记录下来,后续有其他的还会再补充。

1、发送消息放入特殊标志:
message.setStringProperty(name, value);
2、接收消息使用基于特殊标志的消息选择器:
MessageConsumer createConsumer(Destination destination, String messageSelector);
注:消息选择器是一个字符串,语法与数据库的SQL相似,相当于SQL语句where条件后面的内容

直接看代码吧,生产者和消费者,这里用队列演示。

生产者:

package com.yuan.filter;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
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 SenderQueue {
	public static void main(String[] args) {
		// 1.获取工厂 连接broker
		ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://192.168.126.128:61616");
		Connection conn = null;
		Session session = null;
		MessageProducer producer = null;
		try {
			// 获得新连接
			conn = cf.createConnection();
			// 3.通过连接获取session
			session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
			// 4.通过session获取队列目的地
			Destination destination = new ActiveMQQueue("yuanQueue");// 基于队列发送
			// Queue createQueue = session.createQueue("yuanQueue");
			// 5.通过session获取生产者,配置发送消息地址
			producer = session.createProducer(destination);
			for (int i = 0; i < 20; i++) {
				// 6.通过session获取消息
				Message message = session.createTextMessage("yuan" + i);
				// 消息发送时,设置唯一标识
				message.setIntProperty("flag", i);
				// 7.发送
				producer.send(message);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				// 7.关闭连接,session,生产者
				if (conn != null) {
					conn.close();
				}
				if (session != null) {
					session.close();
				}
				if (producer != null) {
					producer.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}



消费者:

package com.yuan.filter;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ReceiverQueue {
	public static void main(String[] args) {
		Connection connection = null;
		Session session = null;
		MessageConsumer consumer = null;
		// 1.创建连接工厂
		ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://192.168.126.128:61616");
		try {
			// 2.创建连接
			connection = cf.createConnection();

			// 3.创建session 参数是是否开启事物
			session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
			// 4.使用session创建消息的目的地
			Destination destination = session.createQueue("yuanQueue");
			// 写一个sql的where条件,但是where关键词要省略
			//String messageSelector = "flag='abcd'";
			String messageSelector = "flag >=10 and flag<=15";
			// 5.使用session创建消息的消费者
			consumer = session.createConsumer(destination, messageSelector);
			// 接收消息之前,需要调用启动方法
			connection.start();
			while(true){
				// 6.设置接收者接收消息的时间,为了便于测试,这里设定为100s
				Message message = consumer.receive();
				// 消息类型有五种
				if (null != message && message instanceof TextMessage) {
					System.out.println("收到文本消息队列" + ((TextMessage) message).getText());
				}		
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (connection != null) {
					connection.close();
				}
				if (session != null) {
					session.close();
				}
				if (consumer != null) {
					consumer.close();
				}
			} catch (Throwable ignore) {
			}
		}
	}
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值