前一篇笔记记录了ActiveMQ的安装简介,这篇笔记主要记录如何使用JMS发送常见的三种消息,即text、Map、和Object类型的数据。JMS有两种方式进行消息通信:Point-to-Point (P2P) 和 Publish/Subscriber (PUB/SUB),即Queue消息和Topic类型的消息,在这个例子中我使用Point to Point的队列形式发送消息,关于两种消息类型的区别,在后边的笔记中我将根据我的理解进行记录。
1、product发送JMS消息
public class QueueSend { public static void main(String[] args) throws JMSException { ConnectionFactory connectionfactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); //创建与JMS服务的连接:ConnectionFactory被管理的对象,由客户端创建,用来创建一个连接对象 Connection connection = connectionfactory.createConnection();//获取连接,connection一个到JMS系统提供者的活动连接 Session session =connection.createSession(false,Session.AUTO_ACKNOWLEDGE );//打开会话,一个单独的发送和接受消息的线程上下文 QueueSend qs = new QueueSend(); qs.sendTextMsg(session,"使用jms发送文本消息","queue.msgText");//发送文本类型的消息 MapMessage mapMsg = session.createMapMessage(); mapMsg.setString("name", "李寻欢1"); mapMsg.setBoolean("IsHero", true); mapMsg.setInt("age", 35); qs.sendMap(session, mapMsg, "queue.msgMap");//发送map类型的消息 Person person = new Person("阿飞", 23, "北京.大兴");//发送Object类型消息 qs.sendObj(session, person, "queue.msgObj"); session.close(); connection.close(); } /* * 发送文本消息 */ public void sendTextMsg(Session session,String MsgContent,String name) throws JMSException{ Queue queue = new ActiveMQQueue(name); MessageProducer msgProducer = session.createProducer(queue); Message msg = session.createTextMessage(MsgContent); msgProducer.send(msg); System.out.println("文本消息已发送"); } /* * 发送MAP类型消息 */ public void sendMap(Session session,MapMessage map,String name) throws JMSException{ Queue queue = new ActiveMQQueue(name); MessageProducer msgProducer = session.createProducer(queue); msgProducer.send(map); System.out.println("Map格式的消息已发送"); } /* * 发送Object类型消息 */ public void sendObj(Session session,Object obj,String name) throws JMSException{ Destination queue = new ActiveMQQueue(name);//分装消息的目的标示 MessageProducer msgProducer = session.createProducer(queue); ObjectMessage objMsg=session.createObjectMessage((Serializable) obj);//发送对象时必须让该对象实现serializable接口 MessageProducer msgPorducer =session.createProducer(queue); msgPorducer.send(objMsg); System.out.println("Object类型的消息已发送"); } }当消息发送成功时我们可以再web消息管理端看到产生了如下图所示的三条消息。
2、consumer消费消息
public class QueueAccept implements MessageListener{ public static void main(String[] args) throws JMSException { ConnectionFactory connectionfactory =null; Connection connection=null; Session session=null; if(connectionfactory==null){ connectionfactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); } if(connection==null){ connection = connectionfactory.createConnection(); connection.start(); } session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = new ActiveMQQueue("queue.msgText");//根据发送的名称接受消息 MessageConsumer consumer = session.createConsumer(queue); consumer.setMessageListener(new QueueAccept());//不继承MessageListener时可以用consumer.receive()手动接受消息 Queue queue1 = new ActiveMQQueue("queue.msgMap"); MessageConsumer consumer1 = session.createConsumer(queue1); consumer1.setMessageListener(new QueueAccept()); Queue queue2 = new ActiveMQQueue("queue.msgObj"); MessageConsumer consumer2 = session.createConsumer(queue2); consumer2.setMessageListener(new QueueAccept()); } public void onMessage(Message message) { /** * 接受文本类型的消息 */ if(message instanceof TextMessage){ //instanceof 测试它所指向的对象是否是TextMessage类 TextMessage text = (TextMessage) message; try { System.out.println("发送的文本消息内容为:"+text.getText()); //接受文本消息 } catch (JMSException e) { e.printStackTrace(); } } /** * 接受Map类型的消息 */ if(message instanceof MapMessage){ MapMessage map = (MapMessage) message; try { System.out.println("姓名:"+map.getString("name")); System.out.println("是否是英雄:"+map.getBoolean("IsHero")); System.out.println("年龄:"+map.getInt("age")); } catch (JMSException e) { e.printStackTrace(); } } if(message instanceof ObjectMessage){ ObjectMessage objMsg = (ObjectMessage) message; try { Person person=(Person) objMsg.getObject(); System.out.println("用户名:"+person.getName()+"年龄:"+person.getAge()+"地址:"+person.getAddress()); } catch (JMSException e) { e.printStackTrace(); } } }客户端运行后接受到的消息:
在上边的代码中,我们在发送Object对象时,我们发送的对象需要实现serializable接口。记得刚找工作的时候有一回有个面试官问到,为什么一个类要实现serializable接口,也许许多人新人都不知道为什么,只能按照背的面试题中的答案去说。刚好这个demo中遇到了这个问题,就继续复习一下java的基础吧。一个类只有实现了serializable才是可以序列化的,通俗的讲实现了serializable接口后我们将可以把这个类,在网络上进行发送,或者将这个类存入到硬盘,序列化的目的就是保存一个对象。
相关推荐
**JMS学习笔记(一)——JMS简介与ActiveMQ安装** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它为应用程序提供了一种标准的方式,用来创建、发送、接收和读取...
通过阅读和学习这些JAVA学习笔记,开发者不仅可以掌握JAVA编程的基本技能,还能深入了解其设计理念,从而更好地应对各种实际开发问题。不断更新和完善自己的JAVA知识体系,对于成为一名优秀的JAVA开发者至关重要。
WebLogic Server是一款由Oracle公司提供的企业级应用服务器,它支持Java Message Service (JMS) 规范,允许在分布式环境中可靠地发送和接收消息。JMS是Java平台上的标准接口,用于实现应用程序间的异步通信。本文将...
消息消费者则是使用JMS API来发送和接收消息的应用程序。 学习JMS时,我们需要掌握以下几个关键点: 1. **消息队列(Message Queue)与主题(Topic)**:队列遵循点对点模型,每个消息只能被一个消费者接收;主题...
老师共享给我们的学习资料,分享出来,希望给大家能有所帮助!
MessageConverter是Spring JMS中的一个重要组件,它的主要职责是将Java对象与JMS消息类型(如TextMessage或ObjectMessage)之间进行转换。Spring默认提供了几种常见的MessageConverter,如SimpleMessageConverter和...
本篇文章将深入探讨如何使用Spring进行JMS消息的发送和接收。 ### 1. JMS概述 JMS是一种中间件协议,它定义了生产、存储和消费消息的标准接口。JMS提供两种类型的消息模型:点对点(Point-to-Point, P2P)和发布/...
本文将深入探讨如何在Spring中整合JMS并实现事务管理,以确保消息传递的可靠性和一致性。 首先,我们需要理解Spring的声明式事务管理。Spring提供了一种强大的声明式事务管理机制,它允许我们在不编写任何事务控制...
- **JmsTemplate**:Spring提供的核心类,用于简化JMS消息的发送和接收操作。 - **MessageListenerContainer**:负责管理和调度消息监听器,使得应用可以在后台异步接收消息。 - **ConnectionFactory**:JMS的...
本文主要探讨的是消息中间件(Message-Oriented Middleware,简称MOM),特别是在Java消息服务(Java Message Service,JMS)的学习笔记。 JMS是Java平台上的一个标准API,用于在分布式环境中进行异步消息传递。它...
通过Spring,可以很容易地管理JMS连接工厂、会话和目的地,以及使用模板模式简化消息的发送和接收。 #### JMS与Hibernate 尽管Hibernate主要用于对象关系映射(ORM),但它也可以与JMS结合使用,特别是在需要处理...
Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份笔记以PPT的形式呈现,使得学习过程更加直观易懂,适合课堂教学或自我学习。...
Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份资料以PPT的形式呈现,使得学习过程更加直观易懂,同时包含了课程中的源代码...
在提供的"jmsCamel"压缩包中,可能包含了一些示例代码或配置文件,演示了如何使用Apache Camel结合JMS进行消息发送和订阅。通过阅读和理解这些示例,你可以更好地掌握JMS和Camel在实际项目中的应用。 总之,JMS提供...
- **消息体类型**:JMS定义了六种消息体类型,包括无消息体的Message、二进制流的StreamMessage、名值对的MapMessage、字符串的TextMessage、对象的ObjectMessage和BytesMessage,以适应不同数据格式的需求。...
**JMS学习笔记** Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中交换异步消息的标准API。它提供了一种可靠的消息传递机制,使得应用程序可以在不互相依赖的情况下进行通信,从而...
2. 创建队列接收类:创建队列接收类是监听 JMS 队列并接受消息的第二步,队列接收类是 JMS 消息的接收者。 监控 JMS 队列 监控 JMS 队列需要按照以下步骤进行: 1. 创建 Web 项目:创建 Web 项目是监控 JMS 队列...
Java 消息服务(JMS,Java Message Service)是一种用于在分布式系统中进行异步数据交换的API,它为应用程序提供了标准的接口来发送和接收消息。JMS规范由JavaSoft(现为Oracle公司的一部分)制定,目的是促进不同...
任何终端之间都可以相互接受和发送消息。并且每个终端都必须遵守如下的规则 -> 创建消息 -> 发送消息 -> 接收消息 -> 读取消息 为什么要使用消息 理由很简单,消息是一个分布式的低耦合通讯方案。A发送一个消息到...