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消息组成相关推荐

  1. RabbitMQ入门(三)消息应答与发布确认

    前言: 消息应答与发布确认都是保证消息不丢失.而重复消费问题则是消息幂等性.(之后会说幂等性) 消息应答: 应答功能属于消费者,消费者在接收到消息并且处理该消息之后,告诉 rabbitmq 它已经处理 ...

  2. ActiveMQ入门系列二:入门代码实例(点对点模式)

    在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...

  3. java JMS消息队列

    http://blog.csdn.net/shirdrn/article/details/6362792 http://haohaoxuexi.iteye.com/blog/1893038 http: ...

  4. ActiveMQ添加商品发送消息

    添加商品 需要同步索引库,同步缓存,生成静态页面等等 很多地方,都需要监听添加商品的事件,所以,这里使用Topic模式 方案选择 方案一:直接写业务逻辑 在商品服务模块,添加商品的业务逻辑中,添加同步 ...

  5. Kafka是什么,JMS是什么,常见的类JMS消息服务器,为什么需要消息队列(来自学习笔记)

    1.Kafka是什么  Apache Kafka是一个开源消息系统,由Scala写成.是由Apache软件基金会开发的一个开源消息系统项目.  Kafka最初是由LinkedIn开发,并于2011 ...

  6. activeMQ高并发发送消息异常解决方法

    高并发发送消息异常解决方法: 现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停 止: javax.jms.JMSException:Could not conne ...

  7. weblogic jms消息 删除_消息队列与消息中间件概述:消息中间件核心概念与技术选型...

    什么是消息? "消息"是在两台计算机间传送的数据单位. 消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 什么是队列? 队列(Queue)队列是一种先进先出 ...

  8. 消息中间件之ActiveMQ入门

    本课程源码地址:https://pan.baidu.com/s/1MhPDUFtqfFFfHJ5K0fMJEQ   提取码:uk5e 关于消息中间件 消息:软件对象彼此通讯的方式 中间件:介于两者之间 ...

  9. Kafka,ActiveMQ,RabbitMQ等消息队列使用的场景介绍

    点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:cws1214 blog.csdn.net/cws1214/article/deta ...

最新文章

  1. C#设计模式系列:访问者模式(Visitor)
  2. php建立数据库操作类,PHP数据库操作类的定义及使用
  3. 独占一行 html_HTML基础-语义化标签
  4. bulma.css_如何建立一个? Bulma CSS的自适应博客设计
  5. 总结对象的两个方法valueof和tostring
  6. java 多线程下载_使用java实现http多线程下载
  7. asp.net使用include包含文件中文乱码_C++: 编写自己的头文件
  8. Bootstrap 更改Navbar默认样式
  9. BOOST库介绍(四)——文件系统相关
  10. 微信公众号开发文档参考
  11. python pip什么意思_“pip install”和“python -m pip install”有什么区别?
  12. 如何压缩word文档的大小?
  13. Linux系统分区备份工具,linux系统备份工具:clonezilla
  14. Activity实战之装备购买小案例
  15. 高性能MMORPG通用服务端引擎设计之-基本概念篇
  16. python计算复数的辐角,(Python 3)1051复数乘法(15分),python31051
  17. Flink 命令行提交参数
  18. vue 实现 高德地图 api 掩模、定位、天气
  19. MindMaster思维导图及亿图图示会员 超值获取途径
  20. 计算机主板上的ide,计算机主板上的IDE接口通常是连接什么设备的数据接口?

热门文章

  1. XGBoost算法案例实战——信用评分模型
  2. GBase 8a MPP Cluster指标
  3. 走进GBase 8a之简介
  4. [SpringCloud] 入门-第四篇: 熔断机制 hystrix
  5. 线程sleep 和wait 的区别
  6. 第18章 项目风险管理
  7. 汽车诊断之UDS入门-0x3E(TesterPresent)诊断仪在线
  8. 玩转淘宝:19天营业额翻18倍
  9. 知识蒸馏论文翻译(7)—— Knowledge Distillation from Internal Representations(内部表征)
  10. 最新金九银十JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等