1.前言

  1. //发送文本消息
  2. session.createTextMessage(msg);
  3.  
  4. //接受文本消息
  5. public void onMessage(Message msg) {
  6. TextMessage message = (TextMessage) msg;
  7. ……
  8. }

根据Message接口的方法,可以获取消息类型

  1. String msgType = getJMSType()

根据 JSR 914: JavaTM Message Service (JMS) API ,JMS规范中的消息类型包括TextMessage、BytesMessage、MapMessage、StreamMessage和ObjectMessage 等五种。ActiveMQ也有对应的实现,下面我们结合Spring JMS分别来看一下五种消息类型的收发代码。

2. 消息发送示例代码

  1. /**
  2. * 向默认队列发送text消息
  3. */
  4. public void sendMessage(final String msg) {
  5. String destination = jmsTemplate.getDefaultDestination().toString();
  6. System.out.println("ProducerService向队列" + destination + "发送了消息:\t" + msg);
  7. jmsTemplate.send(new MessageCreator() {
  8. public Message createMessage(Session session) throws JMSException {
  9. return session.createTextMessage(msg);
  10. }
  11. });
  12. }
  13.  
  14. /**
  15. * 向默认队列发送map消息
  16. */
  17. public void sendMapMessage() {
  18. jmsTemplate.send(new MessageCreator() {
  19. public Message createMessage(Session session) throws JMSException {
  20. MapMessage message = session.createMapMessage();
  21. message.setString("name", "小西山");
  22. return message;
  23. }
  24. });
  25. }
  26.  
  27. /**
  28. * 向默认队列发送Object消息
  29. */
  30. public void sendObjectMessage() {
  31. jmsTemplate.send(new MessageCreator() {
  32. public Message createMessage(Session session) throws JMSException {
  33. Staff staff = new Staff(1, "搬砖工"); // Staff必须实现序列化
  34. ObjectMessage message = session.createObjectMessage(staff);
  35. return message;
  36. }
  37. });
  38. }
  39.  
  40. /**
  41. * 向默认队列发送Bytes消息
  42. */
  43. public void sendBytesMessage() {
  44. jmsTemplate.send(new MessageCreator() {
  45. public Message createMessage(Session session) throws JMSException {
  46. String str = "BytesMessage 字节消息";
  47. BytesMessage message = session.createBytesMessage();
  48. message.writeBytes(str.getBytes());
  49. return message;
  50. }
  51. });
  52. }
  53.  
  54. /**
  55. * 向默认队列发送Stream消息
  56. */
  57. public void sendStreamMessage() {
  58. jmsTemplate.send(new MessageCreator() {
  59. public Message createMessage(Session session) throws JMSException {
  60. String str = "StreamMessage 流消息";
  61. StreamMessage message = session.createStreamMessage();
  62. message.writeString(str);
  63. message.writeInt(521);
  64. return message;
  65. }
  66. });
  67. }

3.消息接受示例代码

  1. /**
  2. * 接受消息
  3. */
  4. public void receive(Destination destination) throws JMSException {
  5. Message message = jmsTemplate.receive(destination);
  6. // 如果是文本消息
  7. if (message instanceof TextMessage) {
  8. TextMessage tm = (TextMessage) message;
  9. System.out.println("ConsumerService从队列" + destination.toString() + "收到了消息:\t" + tm.getText());
  10. }
  11.  
  12. // 如果是Map消息
  13. if (message instanceof MapMessage) {
  14. MapMessage mm = (MapMessage) message;
  15. System.out.println("ConsumerService从队列" + destination.toString() + "收到了消息:\t"
  16. + mm.getString("name"));
  17. }
  18.  
  19. // 如果是Object消息
  20. if (message instanceof ObjectMessage) {
  21. ObjectMessage om = (ObjectMessage) message;
  22. Staff staff = (Staff) om.getObject();
  23. System.out.println("ConsumerService从队列" + destination.toString() + "收到了消息:\t" + staff);
  24. }
  25.  
  26. // 如果是bytes消息
  27. if (message instanceof BytesMessage) {
  28. byte[] b = new byte[1024];
  29. int len = -1;
  30. BytesMessage bm = (BytesMessage) message;
  31. while ((len = bm.readBytes(b)) != -1) {
  32. System.out.println(new String(b, 0, len));
  33. }
  34. }
  35.  
  36. // 如果是Stream消息
  37. if (message instanceof StreamMessage) {
  38. StreamMessage sm = (StreamMessage) message;
  39. System.out.println(sm.readString());
  40. System.out.println(sm.readInt());
  41. }
  42.  
  43. }

ActiveMQ之二--JMS消息类型的更多相关文章

  1. 学习ActiveMQ(五):activemq的五种消息类型和三种监听器类型

    一.前面我们一直发送的是字符串类型,其实activemq一共支持五种消息类型: 1.String消息类型:发送者:消费者: 1.String消息类型:发送者:消费者: 1.String消息类型:发送者 ...

  2. JMS消息类型模型

    JMS有两种消息类型模型,一种是P2P(Point To Point), 另一种是Pub/Sub(Publisher/Subscriber),二者之间的主要区别在于消息是否支持重复消费. P2P模型中 ...

  3. 学习ActiveMQ(六):JMS消息的确认与重发机制

    当我们发送消息的时候,会出现发送失败的情况,此时我们需要用到activemq为我们提供了消息重发机制,进行消息的重新发送.那么我们怎么知道消息有没有发送失败呢?activemq还有消息确认机制,消费者 ...

  4. 学习ActiveMQ(七):JMS消息的事务管理

    Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...

  5. ros中文术语表及消息类型表

    前言:整理一些ros常用表格,包括中文术语对照表. 一.中文术语表 二.消息类型表 -END-

  6. Activemq消息类型

    Activemq消息类型JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage.BytesMessage.和StreamMessage等五种.ActiveM ...

  7. 消息中间件--ActiveMQ&JMS消息服务

    ### 消息中间件 ### ---------- **消息中间件** 1. 消息中间件的概述 2. 消息中间件的应用场景 * 异步处理 * 应用解耦 * 流量削峰 * 消息通信   --------- ...

  8. ActiveMQ常见消息类型

    JMS由下面三部分组成:消息头.属性.消息体.其中消息体定义了五种消息体格式,也可以称为消息类型. JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage. ...

  9. Activemq 消息类型 (转)

    Activemq消息类型JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage.BytesMessage.和StreamMessage等五种.ActiveM ...

随机推荐

  1. Android ScaleAnimation类:尺寸变化动画类

    ScaleAnimation类是Android系统中的尺寸变化动画类,用于控制View对象的尺寸变化,该类继承于Animation类. ScaleAnimation类中的很多方法都与Animation ...

  2. python中写shell(转)

    python中写shell,亲测可用,转自stackoverflow To run a bash script, copy from stackoverflow def run_script(scri ...

  3. CF 2013-2014CTS01E04(Killer Challenge-将质因数存在 进行Bitmask)

    首先,把P进行质因数分解,每一个不用的质因数压成1位 f[i][j]表示1前i位用j“拥有”的质因数表示. 然后都懂得... #include<cstdio> #include<cs ...

  4. Ubuntu下搭建java开发环境

    JDK安装: 1. 在http://www.oracle.com/technetwork/java/javase/downloads/index.html上下载相应版本的JDK环境,这里我使用的是jd ...

  5. Oracle —— 表结构相关的SQL

    1.表基本信息(Table) select * from user_tables t, user_tab_comments c where c.table_name = t.table_name an ...

  6. Oracle —— 函数 length() 和 lengthb() 的区别

    先看看几个例子: select length('Oracle') from dual 结果:6 select lengthb('Oracle') from dual 结果:6 select lengt ...

  7. RSA (cryptosystem)

    https://en.wikipedia.org/wiki/RSA_(cryptosystem) RSA is one of the first practical实用性的 public-key cr ...

  8. 通过两个GPS计算两个GPS点的距离

    public static double GetDistance(double lat1, double lng1, double lat2, double lng2) { double radLat ...

  9. plsql programming 19 触发器

    挂起语句, 是指数据库 Hang 到那不能动了, 触发的. 1. DML 触发器 这种类型的触发器对于开发人员都很常见, 其他类型的触发器主要是给DBA使用的. 配置触发器,我们需要回答以下问题: 触 ...

  10. JS 点击事件学习总结

    废话篇: 在我们编写无论什么网页内容的时候我们总是或多或少的要接触到点击事件这一范畴的,写过几个简短的demo和网页之后,感觉自己对电机事件一类的东西了解也更为的清楚了,之前写过很多零零散散的东西现在 ...