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-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-CPP支持基于会话的事务,确保消息的一致性和可靠性。 - ** selectors**:允许根据特定条件过滤消息,只消费满足条件的消息。 3. ** MQTT 协议支持** MQTT是一种轻量级发布/订阅消息...
标签: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.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-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.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.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-CPP Library 3.9.5为C++开发者提供了与ActiveMQ交互的便捷方式,结合Visual Studio 2015和2017的支持,能够在Windows平台上高效地构建消息驱动的应用程序。通过理解其核心组件和使用方法,开发者可以...
赠送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文档-中文...
10. **性能和扩展性**:ActiveMQ设计时考虑了高性能和大规模部署的需求,能够处理高并发的请求,同时支持通过增加更多的服务器节点来扩展容量。 11. **Web管理界面**:压缩包中的“webapps”目录包含了ActiveMQ的...
10. **WebSockets支持**:ActiveMQ 5.15.6版本中,引入了对WebSockets的支持,这使得实时Web应用可以直接与消息代理交互,为Web应用提供低延迟的消息传递能力。 在"apache-activemq-5.15.6"压缩包中,包含了完整的...
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是业界广泛使用的消息代理,提供可靠的消息传递服务,支持多种协议,如OpenWire、STOMP、AMQP、MQTT和WS-Notification。 - 版本5.8.0是一个稳定版本,包含了之前版本的改进和新特性,旨在提高...
ActiveMQ支持多种协议,包括开放消息传递接口(Openwire)、STOMP、XMPP、AMQP和WebSockets,使其能够与各种不同的系统和语言进行交互。 在安装过程中,解压"apache-activemq-5.15.8-bin.zip"后,你会得到一个包含...