activemq系列(3)-添加条件的应用实例

代码如下:

生产者:

 

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;

/***
 * 生产者
 * 
 * @author liuzhihu
 *
 */
public class Producer {

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

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

		// 1、获取工厂连接
		
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);

		// 2、 从连接工厂中获取连接
		
		Connection connection = connectionFactory.createConnection();

		// 3、从连接中创建session
		
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

		// 4、选择消息类型
		
		MapMessage mapMessage = session.createMapMessage();

		mapMessage.setString("name", "yj");
		mapMessage.setIntProperty("age", 25);

		MapMessage mapMessage2 = session.createMapMessage();

		mapMessage2.setString("name", "yy");
		mapMessage2.setIntProperty("age", 23);

		// 5、创建消息目的地

		Destination destination = session.createQueue("testQueueI2");

		// 6、创建生产者

		MessageProducer producer = session.createProducer(destination);

		// 7、非持久化

		producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

		// 8、发送消息

		producer.send(mapMessage);
		producer.send(mapMessage2);

		session.close();

		connection.close();

	}

}


消费者:

 

 

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.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Consume {

	public static String condition = "age>=25";

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

		// 1、获取工厂连接 使用默认的用户名、密码、地址

		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
				ActiveMQConnection.DEFAULT_PASSWORD, ActiveMQConnection.DEFAULT_BROKER_URL);

		// 2、 从连接工厂中获取连接 同时启动链接

		Connection connection = connectionFactory.createConnection();

		connection.start();

		// 3、从连接中创建session

		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

		// 4、创建消息目的地

		Destination destination = session.createQueue("testQueueI2");

		// 5、创建消费者

		MessageConsumer consumer = session.createConsumer(destination, condition);

		// 6、注册
		consumer.setMessageListener(new MessageListener() {

			@Override
			public void onMessage(Message message) {

				if (message instanceof MapMessage) {

					try {

						System.out.println("接收消息:" + ((MapMessage) message).getString("name"));

						message.acknowledge();

					} catch (JMSException e) {

						e.printStackTrace();
					}

				}

			}
		});

	}

}


注:

 

 

1.producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 这段代码,是代表着非持久化,一般情况下,学习的情况下,用的比较多,重启activemq,原本发布的消息会丢失,生产环境中,一般是开启持久化的,消息内容往往都是会保存在数据库中,当然,要是对于消息的丢失没有要求的话,可以选择不开启持久化,性能相对提高。

 

2. 消费者获取生产者发布的消息时,是主动去请求获取消息的过程,只是MessageListener将这个过程给封装了。

 

3.使用MessageListener 接收消息时,一定要用message instanceof xxx,因为往往还会存在一些其他的消息类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值