ActiveMQ在处理消息的时候,不能直接进行消息的传递,必须将消息封装为对应的类型,才可以传输。
携带一个java.lang.String作为有效数据(负载)的消息,可用于字符串类型的信息交换。
携带一个可以序列化的Java对象作为有效负载的消息,可用于Java对象类型的信息交换。
注意:需要在接收方添加受信任的包
案例演示
1.在com.sxbdqn.activemq.model包下创建User类
2.修改QueueSender类中,添加发送对象的代码
//对象消息类型
User user = new User();
user.setId(100);
user.setName("张三");
user.setAge(18);
Message message = session.createObjectMessage(user);
3.修改QueueReceiver类中,添加对对象消息接收处理的代码
4.直接运行会报错
说消息已经处理,但是没有接收到,可以到指定的网站上查看如何配置
5.查看网站提供的解决方式,在消息消费者端将对象所在的包添加为受信任的
//1 .创建一个连接工厂
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
//添加受信任的包
List trustList = new ArrayList();
trustList.add("com.sxbdqn.activemq.model");
connectionFactory.setTrustedPackages(trustList);
6.接收效果
携带一组键值对的数据作为有效负载的消息,其中Key必须为字符串,有效数据值必须是Java原始数据类型(或者它们的包装类)及String。
案例演示
1.修改QueueSender类中,添加发送映射消息的代码
//映射消息
MapMessage message = session.createMapMessage();
message.setInt("age",10);
message.setString("school","北京乐学网");
2.修改QueueReceiver类中,添加对映射消息接收处理的代码
3.运行查看效果
BytesMessage字节消息
携带一组原始数据类型的字节流(字节数组)作为有效负载的消息。
注意:发送和接收的顺序必须一致。
案例演示
1.修改QueueSender类中,添加发送字节消息的代码
//字节消息
BytesMessage message = session.createBytesMessage();
message.writeBoolean(true);
message.writeUTF("北京乐学网");//写字符串方法
2.修改QueueReceiver类中,添加对字节消息接收处理的代码
3.运行查看效果
StreamMessage流消息
携带一个原始数据类型流作为有效负载的消息,它保持了写入流时的数据类型,写入什么类型,则读取也需要是相同的类型。
注意:发送和接收的顺序必须一致。
案例演示
1.修改QueueSender类中,添加发送字节消息的代码
StreamMessage message = session.createStreamMessage();
message.writeLong(1000L);
message.writeString("哈哈");
2.修改QueueReceiver类中,添加对字节消息接收处理的代码
3.运行查看效果