ActiveMQ的使用及整合spring的使用例項

Adrian_Dai發表於2018-03-10

ActiveMQ的主要使用步驟

主要講述的是使用的一些步驟,關於兩種訊息不提供解釋。

資訊生產者

 

/**
	 * 傳送點對點的訊息
	 * @throws Exception
	 */
	public void sendQueueTest() throws Exception{
		//第一步:建立ActiveMQConnectionFactory物件,需要指定服務端ip及埠號。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.1.123:61616");
		//第二步:使用ConnectionFactory物件建立一個Connection物件。
		Connection connection = connectionFactory.createConnection();
		//第三步:開啟連線,呼叫Connection物件的start方法。
		connection.start();
		//第四步:使用Connection物件建立一個Session物件。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session物件建立一個Destination物件(topic、queue),此處建立一個Queue物件。
		Queue queue = session.createQueue("test-queue");
		//第六步:使用Session物件建立一個Producer物件。
		MessageProducer producer = session.createProducer(queue);
		//第七步:建立一個Message物件,建立一個TextMessage物件。
		TextMessage message = session.createTextMessage("測試訊息");
		//第八步:使用Producer物件傳送訊息。
		producer.send(message);
		//第九步:關閉資源
		producer.close();
		session.close();
		connection.close();
	}

 

/**
	 * 釋出訊息
	 * @throws Exception
	 */
	public void sendTopicTest() throws Exception{
		//第一步:建立ActiveMQConnectionFactory物件,需要指定服務端ip及埠號。
		ConnectionFactory ConnectionFactory = new ActiveMQConnectionFactory("tcp://192.168.191.4:61616");
		//第二步:使用ConnectionFactory物件建立一個Connection物件。
		Connection connection = ConnectionFactory.createConnection();
		//第三步:開啟連線,呼叫Connection物件的start方法。
		connection.start();
		//第四步:使用Connection物件建立一個Session物件。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session物件建立一個Destination物件(topic、queue),此處建立一個Topic物件。
		Topic topic = session.createTopic("Dai-Topic");
		//第六步:使用Session物件建立一個Producer物件。
		MessageProducer producer = session.createProducer(topic);
		//第七步:建立一個Message物件,建立一個TextMessage物件。
		TextMessage message = session.createTextMessage("test1_dai-Topic");
		//第八步:使用Producer物件傳送訊息。
		producer.send(message);
		//第九步:關閉資源
		producer.close();
		session.close();
		connection.close();
	}


資訊的接受者

 

/**
	 * 接收點對點的訊息
	 * @throws Exception
	 */
	public void getQueueTest() throws Exception { 
		//消費者:接收訊息。
		//第一步:建立一個ConnectionFactory物件。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.1.123:61616");
		//第二步:從ConnectionFactory物件中獲得一個Connection物件。
		Connection connection = connectionFactory.createConnection();
		//第三步:開啟連線。呼叫Connection物件的start方法。
		connection.start();
		//第四步:使用Connection物件建立一個Session物件。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session物件建立一個Destination物件。和傳送端保持一致queue,並且佇列的名稱一致。
		Queue queue = session.createQueue("test-queue");
		//第六步:使用Session物件建立一個Consumer物件。
		MessageConsumer consumer = session.createConsumer(queue);
		//第七步:接收訊息。
		consumer.setMessageListener(new MessageListener() {
			
			@Override
			public void onMessage(Message message) {
				TextMessage textMessage = (TextMessage) message;
				//第八步:列印訊息。
				try {
					System.out.println(textMessage.getText());
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		});
		System.in.read();
		//第九步:關閉資源
		consumer.close();
		session.close();
		connection.close();
	}


/**
	 * 訂閱訊息
	 * @throws Exception
	 */
	public void getTopicTest() throws Exception { 
		//消費者:接收訊息。
		//第一步:建立一個ConnectionFactory物件。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.191.4:61616");
		//第二步:從ConnectionFactory物件中獲得一個Connection物件。
		Connection connection = connectionFactory.createConnection();
		//第三步:開啟連線。呼叫Connection物件的start方法。
		connection.start();
		//第四步:使用Connection物件建立一個Session物件。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//第五步:使用Session物件建立一個Destination物件。和傳送端保持一致Topic。
		Topic topic = session.createTopic("Dai-Topic");
		//第六步:使用Session物件建立一個Consumer物件。
		MessageConsumer consumer = session.createConsumer(topic);
		//第七步:接收訊息。
		consumer.setMessageListener(new MessageListener() {
			@Override
			public void onMessage(Message message) {
				TextMessage textMessage = (TextMessage)message;
				try {
					System.out.println("接收到訊息是:"+textMessage.getText().toString());
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		});
		System.in.read();
		//第九步:關閉資源
		consumer.close();
		session.close();
		connection.close();
	}

 

整合spring後的使用(配置檔案略)

資訊生產者

 

//JMS提供的ActiveMq的工具類
	@Autowired
	private JmsTemplate jmsTemplate;
	//這個是釋出/訂閱模式
	@Resource
	private Destination topicDestination;

//將新增商品的訊息新增到佇列
		jmsTemplate.send(topicDestination, new MessageCreator() {
			@Override
			public Message createMessage(Session session) throws JMSException {
				return session.createTextMessage(itemID + "");
			}
		});


資訊的接受者

/**
 * 訊息佇列的監聽器
 * @author adrain
 *
 */
public class SearchMessageListener implements MessageListener {

	@Autowired
	private SearchItemService searchItemService;
	
	@Override
	public void onMessage(Message message) {
		try {
			if(message instanceof TextMessage){
				TextMessage textMessage = (TextMessage) message;
				String itemId = textMessage.getText();
				Thread.sleep(1000);
				searchItemService.addDocument(Long.parseLong(itemId));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


相關文章