JMS消息

JMS消息头
在传送消息时,消息头的值由JMS提供者来设置,因此开发者使用以上
setJMSXXX()方法分配的值就被忽略了,只有以下几个值是可以由开发者设置的:
JMSCorrelationID,JMSReplyTo,JMSType

JMS消息体
· TextMessage–一个字符串对象
· MapMessage–一套名称-值对
· ObjectMessage–一个序列化的 Java 对象
· BytesMessage–一个字节的数据流
· StreamMessage – Java原始值的数据流

//1,文本消息
TextMessage textMessage = session.createTextMessage("test msg");

//2,map消息
MapMessage mapMessage = session.createMapMessage();
mapMessage.setString("name","zhangsan");
mapMessage.setInt("age",20);

@JmsListener(destination = "${activemq.name}")
public void receiveMsg (Message message){
    if(message instanceof MapMessage){
        //接收map消息
        MapMessage mapMessage = (MapMessage) message;
        try {
            System.out.println("name :"+mapMessage.getString("name"));
            System.out.println("age :"+mapMessage.getString("age"));
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

 //3,object消息
/**
* 发送object message 消息
 */
@Test
public void objectMessage(){

    jmsTemplate.send(name, new MessageCreator() {
        @Override
        public Message createMessage(Session session) throws JMSException {
            //object消息
            User user =  new User("xiaoming","123456");
            ObjectMessage objectMessage = session.createObjectMessage(user);
            return objectMessage;
        }
    });

}

/**
 * 注意:对象必须实现序列化
 */
public class User implements Serializable {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }
}

application.yml中:
 packages:
          trust-all: true # 让activeMQ信任全部自定义对象,实现对象的序列号或反序列化

@JmsListener(destination = "${activemq.name}")
public void receiveMsg (Message message){
     if(message instanceof ObjectMessage){
         //接收object消息
         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();
         }
     }
 }

//4,bytes消息
/**
* 发送bytes 消息
*/
@Test
public void bytesMessage(){

   jmsTemplate.send(name, new MessageCreator() {
       @Override
       public Message createMessage(Session session) throws JMSException {
           //bytes消息
           BytesMessage bytesMessage = session.createBytesMessage();
           //读取文件
           File file = new File("F:/E类人才认定资料/社保证明.jpg");
           try {
               //构建文件输入流
               FileInputStream fileInputStream = new FileInputStream(file);
               //把文件流写入到缓存数组中
               byte[] buffer = new byte[(int)file.length()];
               fileInputStream.read(buffer);
               //把缓存数组写入到BytesMessage中
               bytesMessage.writeBytes(buffer);
           } catch (Exception e) {
               e.printStackTrace();
           }
           return bytesMessage;
       }
   });

}

在JmsListener中接收消息
@JmsListener(destination = "${activemq.name}")
public void receiveMsg (Message message){
    if(message instanceof BytesMessage){
        //接收BytesMessage消息
        BytesMessage bytesMessage = (BytesMessage) message;
        try {
            System.out.println((int)bytesMessage.getBodyLength());
            //设计缓存数组
            byte[] buffer = new byte[(int)bytesMessage.getBodyLength()];
            //把字节消息的内容写入到缓存数组
            bytesMessage.readBytes(buffer);
            //构建文件输出流
            FileOutputStream fileOutputStream = new FileOutputStream("F:/E类人才认定资料/社保证明1.jpg");
            //把数据写入本地硬盘
            fileOutputStream.write(buffer);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

//5,Stream消息
/**
* 发送stream message 消息
 */
@Test
public void streamMessage(){

    jmsTemplate.send(name, new MessageCreator() {
        @Override
        public Message createMessage(Session session) throws JMSException {
            //stream消息
            StreamMessage streamMessage = session.createStreamMessage();
            streamMessage.writeString("hello");
            streamMessage.writeInt(123);
            return streamMessage;
        }
    });

//接收端
@JmsListener(destination = "${activemq.name}")
public void receiveMsg (Message message){
     if(message instanceof StreamMessage){
         //接收StreamMessage消息
         StreamMessage streamMessage = (StreamMessage) message;
         try {
             System.out.println(streamMessage.readString());
             System.out.println(streamMessage.readInt());
         } catch (JMSException e) {
             e.printStackTrace();
         }
     }
 }

消息持久化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值