ActiveMQ系列—使用示例(在ActiveMQ中传递Stomp消息)
来源:互联网 发布:干淘宝网店都需要什么 编辑:程序博客网 时间:2024/05/26 09:55
下面我们使用ActiveMQ提供的JAVA 客户端(实际上就是ActiveMQ对JMS规范的实现),向ActiveMQ中的Queue(示例代码中将这个Queue命名为’test’)发送一条Stomp协议消息,然后再使用JAVA语言的客户端,从ActiveMQ上接受这条消息:
1、使用ActiveMQ的API发送Stomp协议消息
import java.net.Socket;import java.util.Date;import org.apache.activemq.transport.stomp.StompConnection;// 消息生产者public class TestProducer { public static void main(String[] args) { try { // 建立Stomp协议的连接 StompConnection con = new StompConnection(); Socket so = new Socket("192.168.1.168", 61613); con.open(so); // 注意,协议版本可以是1.2,也可以是1.1 con.setVersion("1.2"); // 用户名和密码,这个不必多说了 con.connect("admin", "admin"); // 以下发送一条信息(您也可以使用“事务”方式) con.send("/test", "234543" + new Date().getTime()); } catch (Exception e) { e.printStackTrace(System.out); } }}
2、使用ActiveMQ的API接收Stomp协议消息
import java.net.Socket;import java.net.SocketTimeoutException;import java.util.Map;import org.apache.activemq.transport.stomp.StompConnection;import org.apache.activemq.transport.stomp.StompFrame;public class TestConsumer { public static void main(String[] args) throws Exception { // 建立连接 StompConnection con = new StompConnection(); Socket so = new Socket("192.168.1.168", 61613); con.open(so); con.setVersion("1.2"); con.connect("admin", "admin"); String ack = "client"; con.subscribe("/test", "client"); // 接受消息(使用循环进行) for (;;) { StompFrame frame = null; try { // 注意,如果没有接收到消息, // 这个消费者线程会停在这里,直到本次等待超时 frame = con.receive(); } catch (SocketTimeoutException e) { continue; } // 打印本次接收到的消息 System.out.println("frame.getAction() = " + frame.getAction()); Map<String, String> headers = frame.getHeaders(); String meesage_id = headers.get("message-id"); System.out.println("frame.getBody() = " + frame.getBody()); System.out.println("frame.getCommandId() = " + frame.getCommandId()); // 在ack是client标记的情况下,确认消息 if ("client".equals(ack)) { con.ack(meesage_id); } } }}
以上分别是使用Activie提供的Stomp协议的消息生产端和Stomp协议的消息消费端的代码(如果您不清楚Stomp协议的细节,可以参考我另一篇文章:《ActiveMQ系列—消息协议(Stomp协议)》)。请注意在代码片段中,并没有出现任何一个带有jms名称的包或者类——这是因为ActiveMQ为Stomp协议提供的JAVA API在内部进行了JMS规范的封装。
您可以查看activemq-stomp中关于协议转换部分的源代码:org.apache.activemq.transport.stomp.JmsFrameTranslator和其父级接口:org.apache.activemq.transport.stomp.FrameTranslator来验证这件事情
阅读全文
0 0
- ActiveMQ系列—使用示例(在ActiveMQ中传递Stomp消息)
- ActiveMQ系列—消息协议(Stomp协议)
- ActiveMQ - stomp 通过自定义转换器来支持 Map 消息传递
- ActiveMQ - stomp 协议发送消息
- ActiveMQ - stomp 协议接收消息
- 消息处理利器 ActiveMQ 的介绍 & Stomp 协议的使用
- python使用stomp连接activemq
- activeMQ+stomp+php实现消息队列
- ActiveMQ+STOMP协议构建消息队列
- ActiveMQ In Action 第一章 消息传递和ActiveMQ简介 1.2 何时何地使用ActiveMQ
- ActiveMQ In Action 第一章 消息传递和ActiveMQ简介 1.3 开始使用ActiveMQ
- [中间件] 消息处理利器 ActiveMQ 的介绍 & Stomp 协议的使用
- [中间件] 消息处理利器 ActiveMQ 的介绍 & Stomp 协议的使用
- python+stomp+activemq
- ActiveMQ系列—ActiveMQ性能优化(下1)(消息存储方案 KahaDB)
- ActiveMQ系列—ActiveMQ性能优化(下2)(消息存储方案 LevelDB)
- ActiveMQ系列—ActiveMQ性能优化(下3)(消息存储方案 RDB)
- [ActiveMQ]消息中间件在Java中的使用
- DButil的介绍以及基础使用方法
- Kafka简介
- NoteExpress2 破解版——word插件过期解决办法(转)
- Redis客户端redis-cli使用命令
- 文件拷贝
- ActiveMQ系列—使用示例(在ActiveMQ中传递Stomp消息)
- 谷歌官方mvp介绍
- js -- 对象排序(根据对象的某一属性)
- Linux基础命令
- 阿里云服务器Svn-Server无法连接
- 分段机制概念
- springboot使用Freemarker支持模版继承
- 网络编程
- django 自定义分页类改善,适用于于条件查询等操作,提高灵活性