008_Queue消息模式发送映射消息
生活随笔
收集整理的這篇文章主要介紹了
008_Queue消息模式发送映射消息
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 新建一個(gè)名為JMSActiveMQMapMessage的Java項(xiàng)目, 同時(shí)拷入相關(guān)jar包
2. 編輯QueueMapMessageProducer.java
package com.jms.activemq.qmm;import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.Session; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory;public class QueueMapMessageProducer {// 默認(rèn)連接用戶名private static final String dftUsr = ActiveMQConnection.DEFAULT_USER;// 默認(rèn)用戶密碼private static final String dftPwd = ActiveMQConnection.DEFAULT_PASSWORD;// 默認(rèn)連接地址private static final String dftUrl = ActiveMQConnection.DEFAULT_BROKER_URL;// 隊(duì)列名稱private static final String queueName = "queueMapMsg";public static void main(String[] args) {// 1. 創(chuàng)建一個(gè)連接工廠QueueConnectionFactory cf = new ActiveMQConnectionFactory(dftUsr, dftPwd, dftUrl);// 連接對象QueueConnection conn = null;// 會話對象QueueSession session = null;try {// 2. 創(chuàng)建連接conn = cf.createQueueConnection();// 3. 啟動連接conn.start();// 4. 創(chuàng)建會話session = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);// 5. 創(chuàng)建消息目的地。如果是點(diǎn)對點(diǎn), 那么它的實(shí)現(xiàn)是Queue; 如果是訂閱模式, 那它的實(shí)現(xiàn)是Topic。這里我們創(chuàng)建一個(gè)名為queueMapMsg的消息隊(duì)列。Queue queue = session.createQueue(queueName);// 6. 消息生產(chǎn)者QueueSender sender = session.createSender(null);// 7. 創(chuàng)建文本消息和發(fā)送消息for(int i = 0; i < 2; i++) {MapMessage message = session.createMapMessage();message.setLong("id", 100000000000L + i);message.setString("name", "lisi");sender.send(queue, message);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} catch (JMSException e) {e.printStackTrace();} finally {try {if (session != null) {session.close();}} catch (JMSException e1) {e1.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (JMSException e) {e.printStackTrace();}}}}} }3. 編輯QueueMapMessageConsumer.java
package com.jms.activemq.qmm;import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueReceiver; import javax.jms.QueueSession; import javax.jms.Session; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory;public class QueueMapMessageConsumer {// 默認(rèn)連接用戶名private static final String dftUsr = ActiveMQConnection.DEFAULT_USER;// 默認(rèn)用戶密碼private static final String dftPwd = ActiveMQConnection.DEFAULT_PASSWORD;// 默認(rèn)連接地址private static final String dftUrl = ActiveMQConnection.DEFAULT_BROKER_URL;// 隊(duì)列名稱private static final String queueName = "queueMapMsg";public static void main(String[] args) {// 1. 創(chuàng)建一個(gè)連接工廠QueueConnectionFactory cf = new ActiveMQConnectionFactory(dftUsr, dftPwd, dftUrl);// 連接對象QueueConnection conn = null;// 會話對象QueueSession session = null;try {// 2. 創(chuàng)建連接conn = cf.createQueueConnection();// 3. 創(chuàng)建會話session = conn.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);// 4. 創(chuàng)建消息目的地。如果是點(diǎn)對點(diǎn), 那么它的實(shí)現(xiàn)是Queue; 如果是訂閱模式, 那它的實(shí)現(xiàn)是Topic。這里我們創(chuàng)建一個(gè)名為queueMapMsg的消息隊(duì)列。Queue queue = session.createQueue(queueName);// 5. 消息消費(fèi)者QueueReceiver receiver = session.createReceiver(queue);// 6. 啟動連接, 準(zhǔn)備開始接收消息conn.start();// 7. 接收消息MapMessage message = (MapMessage) receiver.receive(1000 * 3);System.out.println("接收: id = " + message.getLong("id") + ", name = " + message.getString("name"));MapMessage message1 = (MapMessage) receiver.receive(1000 * 3);System.out.println("接收: id = " + message1.getLong("id") + ", name = " + message1.getString("name"));// 8. 客戶端主動確認(rèn)消息已成功接收。進(jìn)行了一次確認(rèn), 卻確認(rèn)了2條消息的消費(fèi), 因?yàn)檫@種確認(rèn)方式是會話級別的。message.acknowledge(); System.out.println("JMSDestination = " + message.getJMSDestination() + ", JMSDeliveryMode = " + message.getJMSDeliveryMode()+ ", JMSExpiration = " + message.getJMSExpiration() + ", JMSPriority = " + message.getJMSPriority()+ ",\r\nJMSMessageID = " + message.getJMSMessageID() + ", JMSTimestamp = " + message.getJMSTimestamp()+ ", JMSCorrelationID = " + message.getJMSCorrelationID() + ",\r\nJMSReplyTo = " + message.getJMSReplyTo()+ ", JMSType = " + message.getJMSType() + ", JMSRedelivered = " + message.getJMSRedelivered());} catch (JMSException e) {e.printStackTrace();} finally {try {if (session != null) {session.close();}} catch (JMSException e1) {e1.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (JMSException e) {e.printStackTrace();}}}}} }4. 運(yùn)行QueueMapMessageProducer.java
5. 注釋掉確認(rèn)消息代碼, 運(yùn)行QueueMapMessageConsumer.java
6. 放開確認(rèn)消息代碼, 再次運(yùn)行QueueMapMessageConsumer.java
總結(jié)
以上是生活随笔為你收集整理的008_Queue消息模式发送映射消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 007_JMS中的持久订阅
- 下一篇: 009_JMS中的事务