ActiveMQ - stomp 通过自定义转换器来支持 Map 消息传递
来源:互联网 发布:js 唤醒支付宝app 编辑:程序博客网 时间:2024/05/22 02:02
1. 添加配置文件
src\META-INF\services\org\apache\activemq\transport\frametranslator\jms-stomp-map-json
class=org.demo.jms.stomp.StompTranslator
2. Java 代码
修改 org\apache\activemq\transport\stomp\LegacyFrameTranslator.java
package org.demo.jms.stomp;// ...import org.codehaus.jackson.map.ObjectMapper;// ...public class StompTranslator implements FrameTranslator { // Object -> json private ObjectMapper objMapper = new ObjectMapper(); public ActiveMQMessage convertFrame(ProtocolConverter converter, StompFrame command) throws JMSException, ProtocolException { // ... if (headers.containsKey(Stomp.Headers.AMQ_MESSAGE_TYPE)) { String intendedType = (String)headers.get(Stomp.Headers.AMQ_MESSAGE_TYPE); if(intendedType.equalsIgnoreCase("text")){ // ... } else if(intendedType.equalsIgnoreCase("bytes")) { // ... } else if (intendedType.equalsIgnoreCase("map")) { // modify start [stompFrame to map] ActiveMQMapMessage mapMsg = new ActiveMQMapMessage(); try { Map<String,Object> map = objMapper.readValue(command.getBody(), Map.class); mapMsg.getContentMap().putAll(map); } catch (Exception e) { throw new ProtocolException("Map could not bet set: " + e, false, e); } msg = mapMsg; // modify end [stompFrame to map] } else { throw new ProtocolException("Unsupported message type '"+intendedType+"'",false); } } // ... return msg; } public StompFrame convertMessage(ProtocolConverter converter, ActiveMQMessage message) throws IOException, JMSException { // ... } else if (message.getDataStructureType() == ActiveMQMessage.DATA_STRUCTURE_TYPE && AdvisorySupport.ADIVSORY_MESSAGE_TYPE.equals(message.getType())) { // ... } else if (message.getDataStructureType() == ActiveMQMapMessage.DATA_STRUCTURE_TYPE) { // modify start [map to stompFrame] Map<String, Object> map = new HashMap<String, Object>(); ActiveMQMapMessage msg = (ActiveMQMapMessage)message; Enumeration<String> nameEnum = msg.getMapNames(); String key; Object value; while (nameEnum.hasMoreElements()) { key = nameEnum.nextElement(); value = msg.getObject(key); map.put(key, value); } // to json byte[] data = objMapper.writeValueAsBytes(map); headers.put("dataType", "json"); headers.put("className", "java.util.Map"); headers.put(Stomp.Headers.CONTENT_LENGTH, data.length + ""); command.setContent(data); // modify end [map to stompFrame] } return command; }}
- ActiveMQ - stomp 通过自定义转换器来支持 Map 消息传递
- ActiveMQ - stomp 协议发送消息
- ActiveMQ - stomp 协议接收消息
- ActiveMQ系列—使用示例(在ActiveMQ中传递Stomp消息)
- activemq消息转换器MessageConverter
- activeMQ+stomp+php实现消息队列
- ActiveMQ+STOMP协议构建消息队列
- python27 安装stomp支持activemq win64
- php 通过stomp协议连接ActiveMQ
- 扩展springMVC消息转换器来支持jsonp数据格式
- 自定义实现消息转换器
- SpringMvc自定义消息转换器
- SpringMvc自定义消息转换器
- Springboot 自定义消息转换器
- 消息处理利器 ActiveMQ 的介绍 & Stomp 协议的使用
- ActiveMQ系列—消息协议(Stomp协议)
- ActiveMQ之spring集成消息转换器MessageConverter
- python+stomp+activemq
- 2012年软件开发者薪资调查报告
- 代码清单5-1使用raw_input()得到一个字符串
- MapReduce实现大矩阵乘法
- JFFS2
- 栈实现进制转换
- ActiveMQ - stomp 通过自定义转换器来支持 Map 消息传递
- Topological sorting
- 最全的CSS处理浏览器兼容问题
- 二叉树遍历(递归与迭代)
- oracle 中文乱码
- 无序整数数组中找第k大的数
- 链接ubuntu下的Mysql数据库时报10061错误
- mmc_claim_host
- hdu 2063