`
dyccsxg
  • 浏览: 206996 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类

ActiveMQ - stomp 通过自定义转换器来支持 Map 消息传递

 
阅读更多

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;
    }
}
分享到:
评论
1 楼 guojigjkill 2014-06-30  

    [111]

相关推荐

    activemq-stomp-5.10.0-sources.jar

    标签:activemq-stomp-5.10.0-sources.jar,activemq,stomp,5.10.0,sources,jar包下载,依赖包

    activemq-stomp-5.10.0.jar

    标签:activemq-stomp-5.10.0.jar,activemq,stomp,5.10.0,jar包下载,依赖包

    activemq-cpp-library-3.9.5-src.zip

    - **事务支持**:ActiveMQ-CPP支持基于会话的事务,确保消息的一致性和可靠性。 - ** selectors**:允许根据特定条件过滤消息,只消费满足条件的消息。 3. ** MQTT 协议支持** MQTT是一种轻量级发布/订阅消息...

    activemq-stomp-5.9.1.jar

    标签:activemq-stomp-5.9.1.jar,activemq,stomp,5.9.1,jar包下载,依赖包

    activemq-stomp-5.8.0.jar

    标签:activemq-stomp-5.8.0.jar,activemq,stomp,5.8.0,jar包下载,依赖包

    activemq-stomp-5.9.0.jar

    标签:activemq-stomp-5.9.0.jar,activemq,stomp,5.9.0,jar包下载,依赖包

    activemq-stomp-5.9.0-javadoc.jar

    标签:activemq-stomp-5.9.0-javadoc.jar,activemq,stomp,5.9.0,javadoc,jar包下载,依赖包

    activemq-stomp-5.9.0-sources.jar

    标签:activemq-stomp-5.9.0-sources.jar,activemq,stomp,5.9.0,sources,jar包下载,依赖包

    activemq-stomp-5.9.1-sources.jar

    标签:activemq-stomp-5.9.1-sources.jar,activemq,stomp,5.9.1,sources,jar包下载,依赖包

    activemq-stomp-5.8.0-javadoc.jar

    标签:activemq-stomp-5.8.0-javadoc.jar,activemq,stomp,5.8.0,javadoc,jar包下载,依赖包

    activemq-stomp-5.10.0-javadoc.jar

    标签:activemq-stomp-5.10.0-javadoc.jar,activemq,stomp,5.10.0,javadoc,jar包下载,依赖包

    activemq-stomp-5.8.0-sources.jar

    标签:activemq-stomp-5.8.0-sources.jar,activemq,stomp,5.8.0,sources,jar包下载,依赖包

    activemq-stomp-5.9.1-javadoc.jar

    标签:activemq-stomp-5.9.1-javadoc.jar,activemq,stomp,5.9.1,javadoc,jar包下载,依赖包

    activemq-cpp-library-3.9.5 编译的windows库文件,支持vs2015、vs2017

    总之,ActiveMQ-CPP Library 3.9.5为C++开发者提供了与ActiveMQ交互的便捷方式,结合Visual Studio 2015和2017的支持,能够在Windows平台上高效地构建消息驱动的应用程序。通过理解其核心组件和使用方法,开发者可以...

    activemq-core-5.7.0-API文档-中文版.zip

    赠送jar包:activemq-core-5.7.0.jar; 赠送原API文档:activemq-core-5.7.0-javadoc.jar; 赠送源代码:activemq-core-5.7.0-sources.jar; 包含翻译后的API文档:activemq-core-5.7.0-javadoc-API文档-中文...

    apache-activemq-5.9.0-bin

    10. **性能和扩展性**:ActiveMQ设计时考虑了高性能和大规模部署的需求,能够处理高并发的请求,同时支持通过增加更多的服务器节点来扩展容量。 11. **Web管理界面**:压缩包中的“webapps”目录包含了ActiveMQ的...

    apache-activemq-5.15.6

    10. **WebSockets支持**:ActiveMQ 5.15.6版本中,引入了对WebSockets的支持,这使得实时Web应用可以直接与消息代理交互,为Web应用提供低延迟的消息传递能力。 在"apache-activemq-5.15.6"压缩包中,包含了完整的...

    apache-activemq-5.15.12-bin.tar.gz

    tar -zxvf apache-activemq-5.15.12-bin.tar.gz 2.进入bin目录 cd /apache-activemq-5.15.12/bin 3.运行,没有配置环境变量只能在bin目录下使用命令 ./activemq 4.配置环境变量,配置完环境变量之后...

    apache-activemq-5.8.0-bin.zip

    - Apache ActiveMQ是业界广泛使用的消息代理,提供可靠的消息传递服务,支持多种协议,如OpenWire、STOMP、AMQP、MQTT和WS-Notification。 - 版本5.8.0是一个稳定版本,包含了之前版本的改进和新特性,旨在提高...

    apache-activemq-5.15.8-bin.zip

    ActiveMQ支持多种协议,包括开放消息传递接口(Openwire)、STOMP、XMPP、AMQP和WebSockets,使其能够与各种不同的系统和语言进行交互。 在安装过程中,解压"apache-activemq-5.15.8-bin.zip"后,你会得到一个包含...

Global site tag (gtag.js) - Google Analytics