转载请出自出处:http://eksliang.iteye.com/blog/2242642
在JMS与ActiveMQ简介(一)中介绍了JMS消息的组成,由三个部分组成,head(头)、properties(属性)、body(包体),其中body中存放要发送给接收应用程序的内容。每个消息接口特定于它所支持的内容类型。JMS为不同类型的内容提供了他们各自的消息类型,但是所有消息都派生自Message接口。
- StreamMessage 一种主体中包含Java基元值流的消息。其填充和读取均按顺序进行。
- MapMessage 一种主体中包含一组键--值对的消息。没有定义条目顺序。
- TextMessage 一种主体中包含Java字符串的消息(例如,XML消息)。
- ObjectMessage 一种主体中包含序列化Java对象的消息。
- BytesMessage 一种主体中包含连续字节流的消息。
下面是对这五种消息的示例:
一、序列化对象,用于ObjectMessage的测试,代码如下:
package com.gosun.activemq.advanced; import java.io.Serializable; public class User implements Serializable{ private static final long serialVersionUID = 1454L; private String userName; private String userPwd; private Integer sex; private Float sal; get() set().....! @Override public String toString() { return "User [userName=" + userName + ", userPwd=" + userPwd + ", sex=" + sex + ", sal=" + sal + "]"; } }
二、发送消息的生产者
package com.gosun.activemq.advanced; import javax.jms.BytesMessage; import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.MapMessage; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Session; import javax.jms.StreamMessage; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveMQQueue; /** * 消息队列模型发送消息至activeMQ * @author Ickes */ public class QueueSend { public static void main(String[] args) throws Exception { ActiveMQConnectionFactory connectionfactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = connectionfactory.createConnection(); connection.start(); Session session =connection.createSession(false,Session.AUTO_ACKNOWLEDGE); Destination destination = new ActiveMQQueue("gosun"); MessageProducer producer = session.createProducer(destination); //设置不持久化 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //发送--文本消息 TextMessage msgText = session.createTextMessage(); msgText.setText("我是文本消息"); //发送--Map消息 MapMessage msgMap = session.createMapMessage(); msgMap.setString("name","ickes"); msgMap.setInt("sal",12000); //发送--序列化消息 ObjectMessage msgObj = session.createObjectMessage(); User user = new User(); user.setUserName("ickes"); user.setSex(1); user.setUserPwd("1234"); user.setSal(120000f); msgObj.setObject(user); //发送--消息流 StreamMessage smsg = session.createStreamMessage(); smsg.writeString("我是StreamMessage流消息"); //发送--字节消息 String byStrs = "我是字节消息"; BytesMessage bmsg = session.createBytesMessage(); bmsg.writeBytes(byStrs.getBytes()); //第六步:生产者向JMS发送消息到队列 producer.send(msgText); producer.send(msgMap); producer.send(msgObj); producer.send(smsg); producer.send(bmsg); //第七步:关闭连接 session.close(); connection.close(); } }
三、接收消息的消费者
package com.gosun.activemq.advanced; import javax.jms.BytesMessage; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.ObjectMessage; import javax.jms.Session; import javax.jms.StreamMessage; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; /** * 消息消费者,手动接收示例 * @author Ickes */ public class QueuesAccept { public static void main(String[] args) throws Exception { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection conn = connectionFactory.createConnection(); Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); conn.start(); //消息目的地 Destination dest = session.createQueue("gosun"); //消息消费者 MessageConsumer consumer = session.createConsumer(dest); //接收消息,超时时间为10秒,先手动接受JMS消息,这儿可以用监听 Message msg = consumer.receive(10*1000); if(msg instanceof TextMessage){//接收text消息 System.out.println(((TextMessage) msg).getText()); }else if(msg instanceof MapMessage){//接收map消息 System.out.println(((MapMessage) msg).getString("name")); System.out.println(((MapMessage) msg).getString("sal")); }else if (msg instanceof ObjectMessage) {//接收序列号消息 System.out.println(((ObjectMessage) msg).getObject()); }else if(msg instanceof StreamMessage){ //接收流消息 System.out.println(((StreamMessage)msg).readString()); }else if(msg instanceof BytesMessage){ //接收字节消息 byte[] bs = new byte[1024]; BytesMessage message = (BytesMessage)msg; while(message.readBytes(bs) !=- 1){ System.out.println(new String(bs)); } } //关闭通道 consumer.close(); session.close(); conn.close(); } }
相关推荐
Spring发送接收JMS消息 文档+例子
-> 创建消息 -> 发送消息 -> 接收消息 -> 读取消息 为什么要使用消息 理由很简单,消息是一个分布式的低耦合通讯方案。A发送一个消息到一个agent ,B作为接受者去agent上获取消息。但是A,B不需要同时到agent上去...
weblogic中使用JMS发送和接受消息(Queue and TOPIC)
JMS消息发送及订阅。详细代码,很简单。
JMS为JAVA开发者提供了一个与消息中介进行交互,以及发送和接收消息的标准API,而且每一个消息中介的实现都会支持JMS。(即JMS为所有消息中介提供了统一接口);JmsTemplate是Spring消除冗长和重复JMS代码的解决方案...
利用soapUI3.5测试JMS消息 利用soapUI3.5测试JMS消息
NULL 博文链接:https://a3mao.iteye.com/blog/313531
理由很简单,消息是一个分布式的低耦合通讯方案。A发送一个消息到一个agent ,B作为接受者去agent上获取消息。但是A,B不需要同时到agent上去注册。agent作为一个中转为A,B提供搞效率的通讯服务。
JMS-java message Service ,消息队列原理介绍,适合activeMQ开发使用
JMS接收端所需要用到的jar包,如果有需要得朋友就下载吧,发送端暂时不发以后再发。
JMS 客户端模式实现服务端、客户端;实现同步以及异步的收发处理;
NULL 博文链接:https://wujiu.iteye.com/blog/2010643
本教程描述了消息服务的概念和一些应用事例,说明了 JMS 的基本概念和结构,并就消息服务的发布/订阅、点对点模式编写了简单代码,最后讨论的JMS的一些高级问题,如食物、可靠性、可恢复性等。
JMS规范并不要求供应商同时支持这两种消息模型,但开发者应该熟悉这两种消息模型的优势与缺点。 Java 语言的客户端和 Java 语言的中间层服务必须能够使用这些消息系统。JMS 为 Java 语言程序提供了一个通用的方式来...
activemq与spring整合发送jms消息入门实例 jar 包和实例代码都在压缩包里了
TongLINK/Q是和IBM MQ相近的消息中间件,其最主要的功能是保证消息的一致性,举一个例子,如果一个应用从socket中接收了银行A发来的数据,在处理数据过程中,应用程序崩溃,这时,银行A数据就会丢失,银行业务数据就...
JMS消息模型…………………………………………………………………………………..7 JMS消息工具…………………………………………………………………………………..10 JMS Point-To-Point模式…………………………...
该属性值默认为false,这样JMS在进行消息监听的时候就会进行事务控制,当在接收消息时监听器执行失败时JMS就会对接收到的消息进行回滚, 对于SessionAwareMessageListener在接收到消息后发送一个返回消息时也处于...
spring-jms使用queue发送消息简单例子,详细参考:http://blog.csdn.net/xiejx618/article/details/38849249
springboot整合jms进行邮件的发送,里面包含了常见的txt格式,html格式,以及图片,附件等。新手必备!