ActiveMQ在處理消息的時(shí)候,不能直接進(jìn)行消息的傳遞,必須將消息封裝為對(duì)應(yīng)的類型,才可以傳輸。
攜帶一個(gè)java.lang.String作為有效數(shù)據(jù)(負(fù)載)的消息,可用于字符串類型的信息交換。
攜帶一個(gè)可以序列化的Java對(duì)象作為有效負(fù)載的消息,可用于Java對(duì)象類型的信息交換。
注意:需要在接收方添加受信任的包
案例演示
1.在com.bjpowernode.activemq.model包下創(chuàng)建User類
2.修改QueueSender類中,添加發(fā)送對(duì)象的代碼
//對(duì)象消息類型
User user = new User();
user.setId(100);
user.setName("張三");
user.setAge(18);
Message message = session.createObjectMessage(user);
3.修改QueueReceiver類中,添加對(duì)對(duì)象消息接收處理的代碼
4.直接運(yùn)行會(huì)報(bào)錯(cuò)
說消息已經(jīng)處理,但是沒有接收到,可以到指定的網(wǎng)站上查看如何配置
5.查看網(wǎng)站提供的解決方式,在消息消費(fèi)者端將對(duì)象所在的包添加為受信任的
//1 .創(chuàng)建一個(gè)連接工廠
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);
//添加受信任的包
List trustList = new ArrayList();
trustList.add("com.bjpowernode.activemq.model");
connectionFactory.setTrustedPackages(trustList);
6.接收效果
攜帶一組鍵值對(duì)的數(shù)據(jù)作為有效負(fù)載的消息,其中Key必須為字符串,有效數(shù)據(jù)值必須是Java原始數(shù)據(jù)類型(或者它們的包裝類)及String。
案例演示
1.修改QueueSender類中,添加發(fā)送映射消息的代碼
//映射消息
MapMessage message = session.createMapMessage();
message.setInt("age",10);
message.setString("school","北京動(dòng)力節(jié)點(diǎn)");
2.修改QueueReceiver類中,添加對(duì)映射消息接收處理的代碼
3.運(yùn)行查看效果
BytesMessage字節(jié)消息
攜帶一組原始數(shù)據(jù)類型的字節(jié)流(字節(jié)數(shù)組)作為有效負(fù)載的消息。
注意:發(fā)送和接收的順序必須一致。
案例演示
1.修改QueueSender類中,添加發(fā)送字節(jié)消息的代碼
//字節(jié)消息
BytesMessage message = session.createBytesMessage();
message.writeBoolean(true);
message.writeUTF("北京動(dòng)力節(jié)點(diǎn)");//寫字符串方法
2.修改QueueReceiver類中,添加對(duì)字節(jié)消息接收處理的代碼
3.運(yùn)行查看效果
StreamMessage流消息
攜帶一個(gè)原始數(shù)據(jù)類型流作為有效負(fù)載的消息,它保持了寫入流時(shí)的數(shù)據(jù)類型,寫入什么類型,則讀取也需要是相同的類型。
注意:發(fā)送和接收的順序必須一致。
案例演示
1.修改QueueSender類中,添加發(fā)送字節(jié)消息的代碼
StreamMessage message = session.createStreamMessage();
message.writeLong(1000L);
message.writeString("哈哈");
2.修改QueueReceiver類中,添加對(duì)字節(jié)消息接收處理的代碼
3.運(yùn)行查看效果