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,因爲往往還會存在一些其他的消息類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章