ActiveMQ入门 (三) JMS消息组成
ActiveMQ入门 (三) JMS消息组成
文章目录
- ActiveMQ入门 (三) JMS消息组成
- 一、JMS协议组成结构
- 二、JMS Message消息组成
- 1.JMS消息头
- 2.JMS消息体
- 1. TextMessage 字符串对象
- 2. MapMessage 一套值对
- 3. ObjectMessage 一个序列化的Java对象X
- 4. BytesMessage 一个字节的数据流
- 5.StreamMessage Java原始值的数据流
- 三、JMS Property设置标签过滤
一、JMS协议组成结构
二、JMS Message消息组成
1.JMS消息头
生产者到消费者之间信息的一种约定
2.JMS消息体
1. TextMessage 字符串对象
/**
* 发送TextMessage消息
*/
@Test
public void testMessage(){jmsTemplate.send(name, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {TextMessage textMessage = session.createTextMessage("文本消息");return textMessage;}});
}
/**
* 接收TextMessage的方法
*/
@JmsListener(destination = "${activemq.name}")
public void receiveMessage(Message message){if(message instanceof TextMessage){TextMessage textMessage = (TextMessage)message;try {System.out.println("接收消息:"+textMessage.getText());} catch (JMSException e) {e.printStackTrace();}}
}
2. MapMessage 一套值对
/**
* 发送MapMessage消息
*/
@Test
public void mapMessage(){jmsTemplate.send(name, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {MapMessage mapMessage = session.createMapMessage();mapMessage.setString("name","张三");mapMessage.setInt("age",20);return mapMessage;}});
}@JmsListener(destination = "${activemq.name}")
public void receiveMessage(Message message){if(message instanceof MapMessage){MapMessage mapMessage = (MapMessage)message;try {System.out.println("名称:"+mapMessage.getString("name"));System.out.println("年龄:"+mapMessage.getString("age"));} catch (JMSException e) {e.printStackTrace();}}
}
3. ObjectMessage 一个序列化的Java对象X
//发送ObjectMessage消息
@Test
public void test2(){jmsTemplate.send(name, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {User user = new User();user.setName("小苍");user.setAge(18);ObjectMessage objectMessage = session.createObjectMessage(user);return objectMessage;}});
}
@JmsListener(destination = "${activemq.name}")
public void receiveMessage(Message message){if(message instanceof ObjectMessage){ObjectMessage objectMessage = (ObjectMessage)message;try {User user = (User)objectMessage.getObject();System.out.println(user.getUsername());System.out.println(user.getPassword());} catch (JMSException e) {e.printStackTrace();}}
}
ActiveMQ5.12后 ,为了安全考虑,ActiveMQ默认不接受自定义的序列化对象,需要将自定义的加入到受信任的列表。
spring:activemq:broker-url: tcp://192.168.66.133:61616user: adminpassword: adminpackages:trust-all: true # 添加所有包到信任列表
4. BytesMessage 一个字节的数据流
//发送BytesMessage消息
@Test
public void test3(){jmsTemplate.send(name, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {BytesMessage bytesMessage = session.createBytesMessage();try {File file = new File("d:/spring.jpg");FileInputStream in = new FileInputStream(file);byte[] bytes = new byte[(int)file.length()];in.read(bytes);bytesMessage.writeBytes(bytes);} catch (Exception e) {e.printStackTrace();}return bytesMessage;}
});
}@JmsListener(destination="${activemq.name}")public void receiveMessage(Message message) throws Exception {BytesMessage bytesMessage = (BytesMessage)message;FileOutputStream out = new FileOutputStream("d:/abc.jpg");byte[] buf = new byte[(int)bytesMessage.getBodyLength()];bytesMessage.readBytes(buf);out.write(buf);out.close();
}
5.StreamMessage Java原始值的数据流
//发送StreamMessage消息@Testpublic void test4(){jmsTemplate.send(name, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {StreamMessage streamMessage = session.createStreamMessage();streamMessage.writeString("你好,ActiveMQ");streamMessage.writeInt(20);return streamMessage;}});}@JmsListener(destination="${activemq.name}")public void receiveMessage(Message message) throws Exception {StreamMessage streamMessage = (StreamMessage)message;String str = streamMessage.readString();int i = streamMessage.readInt();System.out.println(str);System.out.println(i);}
三、JMS Property设置标签过滤
我们可以给消息设置自定义属性,这些属性主要是提供给应用程序的。对于实现消息过滤功能,消息属性非常有用,JMS API定义了一些标准属性,JMS服务提供者可以选择性的提供部分标准属性。
message.setStringProperty("Property",Property); //自定义属性
ActiveMQ入门 (三) JMS消息组成相关推荐
- RabbitMQ入门(三)消息应答与发布确认
前言: 消息应答与发布确认都是保证消息不丢失.而重复消费问题则是消息幂等性.(之后会说幂等性) 消息应答: 应答功能属于消费者,消费者在接收到消息并且处理该消息之后,告诉 rabbitmq 它已经处理 ...
- ActiveMQ入门系列二:入门代码实例(点对点模式)
在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...
- java JMS消息队列
http://blog.csdn.net/shirdrn/article/details/6362792 http://haohaoxuexi.iteye.com/blog/1893038 http: ...
- ActiveMQ添加商品发送消息
添加商品 需要同步索引库,同步缓存,生成静态页面等等 很多地方,都需要监听添加商品的事件,所以,这里使用Topic模式 方案选择 方案一:直接写业务逻辑 在商品服务模块,添加商品的业务逻辑中,添加同步 ...
- Kafka是什么,JMS是什么,常见的类JMS消息服务器,为什么需要消息队列(来自学习笔记)
1.Kafka是什么 Apache Kafka是一个开源消息系统,由Scala写成.是由Apache软件基金会开发的一个开源消息系统项目. Kafka最初是由LinkedIn开发,并于2011 ...
- activeMQ高并发发送消息异常解决方法
高并发发送消息异常解决方法: 现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停 止: javax.jms.JMSException:Could not conne ...
- weblogic jms消息 删除_消息队列与消息中间件概述:消息中间件核心概念与技术选型...
什么是消息? "消息"是在两台计算机间传送的数据单位. 消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 什么是队列? 队列(Queue)队列是一种先进先出 ...
- 消息中间件之ActiveMQ入门
本课程源码地址:https://pan.baidu.com/s/1MhPDUFtqfFFfHJ5K0fMJEQ 提取码:uk5e 关于消息中间件 消息:软件对象彼此通讯的方式 中间件:介于两者之间 ...
- Kafka,ActiveMQ,RabbitMQ等消息队列使用的场景介绍
点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:cws1214 blog.csdn.net/cws1214/article/deta ...
最新文章
- C#设计模式系列:访问者模式(Visitor)
- php建立数据库操作类,PHP数据库操作类的定义及使用
- 独占一行 html_HTML基础-语义化标签
- bulma.css_如何建立一个? Bulma CSS的自适应博客设计
- 总结对象的两个方法valueof和tostring
- java 多线程下载_使用java实现http多线程下载
- asp.net使用include包含文件中文乱码_C++: 编写自己的头文件
- Bootstrap 更改Navbar默认样式
- BOOST库介绍(四)——文件系统相关
- 微信公众号开发文档参考
- python pip什么意思_“pip install”和“python -m pip install”有什么区别?
- 如何压缩word文档的大小?
- Linux系统分区备份工具,linux系统备份工具:clonezilla
- Activity实战之装备购买小案例
- 高性能MMORPG通用服务端引擎设计之-基本概念篇
- python计算复数的辐角,(Python 3)1051复数乘法(15分),python31051
- Flink 命令行提交参数
- vue 实现 高德地图 api 掩模、定位、天气
- MindMaster思维导图及亿图图示会员 超值获取途径
- 计算机主板上的ide,计算机主板上的IDE接口通常是连接什么设备的数据接口?
热门文章
- XGBoost算法案例实战——信用评分模型
- GBase 8a MPP Cluster指标
- 走进GBase 8a之简介
- [SpringCloud] 入门-第四篇: 熔断机制 hystrix
- 线程sleep 和wait 的区别
- 第18章 项目风险管理
- 汽车诊断之UDS入门-0x3E(TesterPresent)诊断仪在线
- 玩转淘宝:19天营业额翻18倍
- 知识蒸馏论文翻译(7)—— Knowledge Distillation from Internal Representations(内部表征)
- 最新金九银十JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等