控制層
//新增隊列(發送MapMessage消息)
@RequestMapping("/sendMapMessage")
@ResponseBody
public String sendMapMessage(@RequestBody String data) {
// 字符串轉json
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(data);
String connectionFactory = map.get("connectionFactory") + "";
Map<String, String> content = (Map<String, String>) map.get("content");
String queueName = map.get("queueName")+"";
String msg=null;
try {
msg = mQQueueService.sendMapMessage(connectionFactory, queueName,content);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return msg;
}
//消費隊列(獲取MapMessage消息)
@RequestMapping("/achieveMapMessage")
@ResponseBody
public Map<String, Object> achieveMapMessage(@RequestBody String data) {
// 字符串轉json
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(data);
String connectionFactory = map.get("connectionFactory") + "";
String studentNo = map.get("studentNo")+"";
String queueName = map.get("queueName")+"";
Map<String, Object> mapMapMessage=null;
try {
mapMapMessage= mQQueueService.achieveMapMessage(connectionFactory, queueName,studentNo);
} catch (JMSException e) {
e.printStackTrace();
}
return mapMapMessage;
}
業務層
// 發送MapMessage演示
@Override
public String sendMapMessage(String connectionFactory, String queueName, Map<String, String> content) throws JMSException {
ConnectionFactory cf = new ActiveMQConnectionFactory(connectionFactory);
Connection connection = cf.createConnection();
connection.start(); //
// 創建會話(需要創建事務,消息自動確認)
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// 循環創建隊列
Destination destination = session.createQueue(queueName);
// 創建生產者,即消息發送方。
MessageProducer producer = session.createProducer(destination);
// 這裏以一個學號對應一個學生爲例
// key表示學號,key對應的value表示學生姓名
// 假如設置屬性是班級編號1203
for (String key : content.keySet()) {
String value = content.get(key);
MapMessage mapMessage = session.createMapMessage();
mapMessage.setStringProperty("classNo", "1203");
mapMessage.setString(key, value);
producer.send(mapMessage);
}
try {
session.commit();
} finally {
session.close();
connection.close();
}
return "SUCCESS";
}
// 獲取MapMessage演示
@Override
public Map<String, Object> achieveMapMessage(String connectionFactory, String queueName, String studentNo) throws JMSException {
ConnectionFactory cf = new ActiveMQConnectionFactory(connectionFactory);
Connection connection = cf.createConnection();
connection.start();
// 確認消息被接受
final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(queueName);
MessageConsumer consumer = session.createConsumer(destination);
MapMessage mm = (MapMessage) consumer.receive();
// 根據學號獲取學生姓名
String value = mm.getString(studentNo);
// 根據學號獲取班級編號
String property = mm.getStringProperty("classNo");
System.out.println("學號:" + studentNo);
System.out.println("姓名:" + value);
System.out.println("班級:" + property);
Map<String, Object> hashMap = new HashMap<String, Object>();
// 如果根據學號可以查詢到學生姓名,則消費隊列。
if (value == null) {
hashMap.put("msg", "查詢該學號失敗。");
} else {
session.commit();
hashMap.put("msg", "查詢該學號成功。");
}
hashMap.put("studentNo", studentNo);
hashMap.put("studentName", value);
hashMap.put("classNo", property);
try {
return hashMap;
} finally {
session.close();
connection.close();
}
}
新增隊列
消費隊列
啓動ActiveMQ後臺
//初始賬號:admin
//初始密碼:admin
http://192.168.0.113:8161/admin