ActiveMQ處理MapMessage隊列

控制層

//新增隊列(發送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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章