ActiveMQ消息过滤消息(JDBC)持久化

ActiveMQ 消息持久化

activeMQ默认支持持久化方式:kahadb leavedb jdbc,默认kahadb ,其中kahadb leavedb 都是内存级的持久化方式,性能更好一些,如果并发量并不是很高的情况下,可以选择JDBC,优点不言而喻,查看简单。

配置如下(本次以ORACLE为例):

1. 将JDBC驱动包拷贝到apache-activemq-5.14.1\lib


2. 打开apache-activemq-5.14.1\conf\activemq.xml

 注释掉kahadb,新增一个persistenceAdapter,配置一个数据源

<persistenceAdapter>
	<jdbcPersistenceAdapter  dataSource="#oracle-ds"/>  
 </persistenceAdapter>
<bean id="oracle-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">  
	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>  
	<property name="url" value="jdbc:oracle:thin:localhost:1521:ORACLE"/>  
	<property name="username" value="scott"/>  
	<property name="password" value=""/>  
	<property name="maxIdle" value="200"/>  
	<property name="poolPreparedStatements" value="true"/>  
</bean> 

消息过滤:

package org.jms.demo.filter;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.console.Main;

public class Send {

	private static final String brokeURL = "tcp://localhost:61616";

	private ConnectionFactory connectionFactory;

	private Connection connection;

	private Destination destination;

	private MessageProducer producer;

	private Session session;

	public Send() throws JMSException {

		connectionFactory = new ActiveMQConnectionFactory(brokeURL);

		connection = connectionFactory.createConnection();

		connection.start();

		session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);

		destination = session.createQueue("FILTER_QUEUE");

		producer = session.createProducer(destination);

	}

	public void send() throws JMSException {

		MapMessage mapMessage3 = this.session.createMapMessage();
		mapMessage3.setString("name", "王二");
		mapMessage3.setInt("age", 27);
		mapMessage3.setIntProperty("age", 27);
		mapMessage3.setStringProperty("name", "王二");
		
		
		
		
		MapMessage mapMessage2 = this.session.createMapMessage();
		mapMessage2.setString("name", "赵四");
		mapMessage2.setInt("age", 26);
		mapMessage2.setIntProperty("age", 26);
		mapMessage2.setStringProperty("name", "赵四");
		
		
		MapMessage mapMessage1 = this.session.createMapMessage();
		mapMessage1.setString("name", "王五");
		mapMessage1.setInt("age", 25);
		mapMessage1.setIntProperty("age", 25);
		mapMessage1.setStringProperty("name", "王五");
		
		
		MapMessage mapMessage4 = this.session.createMapMessage();
		mapMessage4.setString("name", "王三");
		mapMessage4.setInt("age", 25);
		mapMessage4.setIntProperty("age", 25);
		mapMessage4.setStringProperty("name", "王三");
		
		
		producer.send(destination, mapMessage1, DeliveryMode.PERSISTENT, 8, 1000 * 60 * 10);
		producer.send(destination, mapMessage2, DeliveryMode.PERSISTENT, 7, 1000 * 60 * 10);
		producer.send(destination, mapMessage3, DeliveryMode.PERSISTENT, 6, 1000 * 60 * 10);
		producer.send(destination, mapMessage4, DeliveryMode.PERSISTENT, 6, 1000 * 60 * 10);
	}

	public static void main(String[] args) throws JMSException {

		Send send = new Send();

		send.send();

	}
}
package org.jms.demo.filter;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Revice {

	private static final String brokeURL = "tcp://localhost:61616";

	private ConnectionFactory connectionFactory;

	private Connection connection;

	private Destination destination;

	private MessageConsumer consumer;

	private Session session;

	private static final String selector = "age > 25 and name like '王%'";

	public Revice() throws JMSException {

		connectionFactory = new ActiveMQConnectionFactory(brokeURL);

		connection = connectionFactory.createConnection();

		connection.start();

		session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);

		destination = session.createQueue("FILTER_QUEUE");

		consumer = session.createConsumer(destination, selector);

		consumer.setMessageListener(new Listener());

	}

	class Listener implements MessageListener {

		@Override
		public void onMessage(Message message) {

			if (message instanceof MapMessage) {

				MapMessage map = (MapMessage) message;

				System.out.println(map.toString());
				try {
					System.out.println(map.getString("name"));
					System.out.println(map.getInt("age"));
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) throws JMSException {

		Revice revice = new Revice();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值