ActiveMQ初學入門

消息發送類

package com.wq.activeMq;


import java.io.Serializable;


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


import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;


/**
 * 消息發送類.
 * 
 * @author wq
 * 
 */
public class MsgSender {


/** tcp地址. */
public static String tcpUrl = "tcp://localhost:61616";


/** ConnectionFactory :連接工廠,JMS 用它創建連接. */
public static ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, tcpUrl);

/**
* 發送文本消息.
* @param session
* @param producer
* @param msgType
* @param msg
*/
private static void sendTextMsg(Session session, MessageProducer producer,
String msgType, String msg) {
try {
// 構造消息.
TextMessage message;
// 獲得文本消息.
message = session.createTextMessage(msg);
// 設置消息類型.
message.setJMSType(msgType);
// 發送消息到目的地方.
producer.send(message);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


/**
* 發送對象消息.
* @param session
* @param producer
* @param msgType
* @param msg
*/
private static void sendObjMsg(Session session, MessageProducer producer,
String msgType, Serializable msg) {
try {
// 構造消息.
ObjectMessage message;
// 獲得文本消息.
message = session.createObjectMessage(msg);
// 設置消息類型.
message.setJMSType(msgType);
// 發送消息到目的地方.
producer.send(message);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


/**
* 發送消息.
* 
* @param destinationName
* @param msgType
* @param msg
*/
public static void send(String destinationName, String msgType, Object msg) {
// Connection :JMS 客戶端到JMS Provider 的連接.
Connection connection = null;
// Session: 一個發送或接收消息的線程.
Session session;
// Destination :消息的目的地;消息發送給誰.
Destination destination;
// MessageProducer:消息發送者.
MessageProducer producer;
try {
// 構造從工廠得到連接對象.
connection = connectionFactory.createConnection();
// 啓動.
connection.start();
// 獲取操作連接.
session = connection.createSession(Boolean.TRUE,
Session.AUTO_ACKNOWLEDGE);
// destinationName需要在admin界面創建.
destination = session.createQueue(destinationName);
// 得到消息生成者.
producer = session.createProducer(destination);
// 設置持久化.
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
// 發送消息
if(msg instanceof String){// 文本類型
sendTextMsg(session,producer,msgType,msg.toString());
}else if(msg instanceof Serializable){// 序列化對象類型
sendObjMsg(session,producer,msgType,(Serializable)msg);
}else{// 默認是文本類型
sendTextMsg(session,producer,msgType,msg.toString());
}
// 提交事務.
session.commit();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}




接收消息處理類

package com.wq.activeMq;


import java.util.HashMap;
import java.util.Map;


import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;


import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;


import com.wq.activeMq.receive.ReceiveObject;
import com.wq.activeMq.receive.ReceiveText;


/**
 * 接收消息處理.
 * 
 * @author wq
 * 
 */
public class MsgReceive {


/** tcp地址. */
public static String tcpUrl = "tcp://localhost:61616";


/** ConnectionFactory :連接工廠,JMS 用它創建連接. */
public static ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, tcpUrl);


/** 消息處理類. */
public static Map<String, MsgDeal> msgDealMap = new HashMap<String, MsgDeal>();


static {
msgDealMap.put("TextType", new ReceiveText());
msgDealMap.put("ObjType", new ReceiveObject());
}


public static void Reveive(String destinationName) {
// Connection :JMS 客戶端到JMS Provider 的連接.
Connection connection = null;
// Session: 一個發送或接收消息的線程.
Session session;
// Destination :消息的目的地;消息發送給誰.
Destination destination;
// 消費者,消息接收者.
MessageConsumer consumer;


try {
// 構造從工廠得到連接對象
connection = connectionFactory.createConnection();
// 啓動
connection.start();
// 獲取操作連接
session = connection.createSession(Boolean.FALSE,
Session.AUTO_ACKNOWLEDGE);
// 獲取session注意參數是一個服務器的queue,須在在ActiveMq的console配置
destination = session.createQueue(destinationName);
// 獲取消費者
consumer = session.createConsumer(destination);
while (true) {
Message msg = consumer.receive(1000);
if (null != msg) {
String msgType = msg.getJMSType();
MsgDeal msgDeal = msgDealMap.get(msgType);
if(null != msgDeal){
msgDeal.onMessage(msg);
}else{
System.err.println("沒有配置msgDealMap:[" + msgType + "]");
}
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection) {
connection.close();
}
} catch (Throwable ignore) {
}
}
}


}



消息處理接口

package com.wq.activeMq;


import javax.jms.Message;


/**
 * 消息處理接口.
 * @author qingwu
 *
 */
public interface MsgDeal {
void onMessage(Message msg);
}



文本消息處理測試接口實現

package com.wq.activeMq.receive;


import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;


import com.wq.activeMq.MsgDeal;


/**
 * 文本消息接收處理測試.
 * 
 * @author wq
 * 
 */
public class ReceiveText implements MsgDeal {


@Override
public void onMessage(Message msg) {
// TODO Auto-generated method stub
try {
TextMessage message = (TextMessage) msg;
if (null != message) {
System.out.println("收到TEXT消息:" + message.getText());
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}




對象消息處理測試接口實現

package com.wq.activeMq.receive;


import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;


import com.wq.activeMq.MsgDeal;
import com.wq.test.TestVO;


/**
 * 對象消息接收測試.
 * 
 * @author wq
 * 
 */
public class ReceiveObject implements MsgDeal {


@Override
public void onMessage(Message msg) {
// TODO Auto-generated method stub
try {
ObjectMessage message = (ObjectMessage) msg;
if (null != message) {
TestVO vo = (TestVO) message.getObject();
System.out.println("收到OBJECT消息:" + vo.getName() + " " + vo.getSex() + " " + vo.getAge());
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}



測試VO對象

package com.wq.test;


import java.io.Serializable;


public class TestVO implements Serializable {


private static final long serialVersionUID = -9118138350208832294L;
String name;
String sex;
int age;


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getSex() {
return sex;
}


public void setSex(String sex) {
this.sex = sex;
}


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}


}



發送測試

package com.wq.test;


import com.wq.activeMq.MsgSender;


public class SendTest {


public static void sendText(){
String destinationName = "queue1";
for(int i=0;i<5;i++){
String msgType = "TextType";
String msg = "text_" + i;
MsgSender.send(destinationName, msgType, msg);
}
}

public static void sendObj(){
String destinationName = "queue1";
for(int i=0;i<5;i++){
String msgType = "ObjType";
TestVO vo = new TestVO();
vo.setName("name_"+i);
vo.setSex("sex_"+i);
vo.setAge(i);
MsgSender.send(destinationName, msgType, vo);
}
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
sendText();
sendObj();
}


}




接收測試

package com.wq.test;


import com.wq.activeMq.MsgReceive;


public class ReceiveTest {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MsgReceive.Reveive("queue1");
}


}


發佈了41 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章