`
西北小强
  • 浏览: 345029 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JMS学习笔记(二)——使用JMS发送和接受text、Map、Object类型的消息

    博客分类:
  • JMS
阅读更多

前一篇笔记记录了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接口后我们将可以把这个类,在网络上进行发送,或者将这个类存入到硬盘,序列化的目的就是保存一个对象。

  • 大小: 138.8 KB
  • 大小: 15.7 KB
分享到:
评论

相关推荐

    JMS学习笔记(一)——JMS简介安装ActiveMQ

    **JMS学习笔记(一)——JMS简介与ActiveMQ安装** Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它为应用程序提供了一种标准的方式,用来创建、发送、接收和读取...

    JAVA学习笔记————————

    通过阅读和学习这些JAVA学习笔记,开发者不仅可以掌握JAVA编程的基本技能,还能深入了解其设计理念,从而更好地应对各种实际开发问题。不断更新和完善自己的JAVA知识体系,对于成为一名优秀的JAVA开发者至关重要。

    weblogic中使用JMS发送和接受消息

    WebLogic Server是一款由Oracle公司提供的企业级应用服务器,它支持Java Message Service (JMS) 规范,允许在分布式环境中可靠地发送和接收消息。JMS是Java平台上的标准接口,用于实现应用程序间的异步通信。本文将...

    JMS学习笔记精心总结

    消息消费者则是使用JMS API来发送和接收消息的应用程序。 学习JMS时,我们需要掌握以下几个关键点: 1. **消息队列(Message Queue)与主题(Topic)**:队列遵循点对点模型,每个消息只能被一个消费者接收;主题...

    jms学习资料参考——经典

    老师共享给我们的学习资料,分享出来,希望给大家能有所帮助!

    Spring整合JMS(三)——MessageConverter介绍

    MessageConverter是Spring JMS中的一个重要组件,它的主要职责是将Java对象与JMS消息类型(如TextMessage或ObjectMessage)之间进行转换。Spring默认提供了几种常见的MessageConverter,如SimpleMessageConverter和...

    Spring发送接收JMS消息

    本篇文章将深入探讨如何使用Spring进行JMS消息的发送和接收。 ### 1. JMS概述 JMS是一种中间件协议,它定义了生产、存储和消费消息的标准接口。JMS提供两种类型的消息模型:点对点(Point-to-Point, P2P)和发布/...

    Spring整合JMS(四)——事务管理

    本文将深入探讨如何在Spring中整合JMS并实现事务管理,以确保消息传递的可靠性和一致性。 首先,我们需要理解Spring的声明式事务管理。Spring提供了一种强大的声明式事务管理机制,它允许我们在不编写任何事务控制...

    ActiveMQ学习笔记(二) JMS与Spring

    - **JmsTemplate**:Spring提供的核心类,用于简化JMS消息的发送和接收操作。 - **MessageListenerContainer**:负责管理和调度消息监听器,使得应用可以在后台异步接收消息。 - **ConnectionFactory**:JMS的...

    jms学习笔记jms学习笔记

    本文主要探讨的是消息中间件(Message-Oriented Middleware,简称MOM),特别是在Java消息服务(Java Message Service,JMS)的学习笔记。 JMS是Java平台上的一个标准API,用于在分布式环境中进行异步消息传递。它...

    JavaEE5学习笔记03-JMS介绍与使用

    通过Spring,可以很容易地管理JMS连接工厂、会话和目的地,以及使用模板模式简化消息的发送和接收。 #### JMS与Hibernate 尽管Hibernate主要用于对象关系映射(ORM),但它也可以与JMS结合使用,特别是在需要处理...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份笔记以PPT的形式呈现,使得学习过程更加直观易懂,适合课堂教学或自我学习。...

    Java JDK 6学习笔记——ppt

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份资料以PPT的形式呈现,使得学习过程更加直观易懂,同时包含了课程中的源代码...

    JMS消息发送及订阅

    在提供的"jmsCamel"压缩包中,可能包含了一些示例代码或配置文件,演示了如何使用Apache Camel结合JMS进行消息发送和订阅。通过阅读和理解这些示例,你可以更好地掌握JMS和Camel在实际项目中的应用。 总之,JMS提供...

    JMS 简单使用指南

    - **消息体类型**:JMS定义了六种消息体类型,包括无消息体的Message、二进制流的StreamMessage、名值对的MapMessage、字符串的TextMessage、对象的ObjectMessage和BytesMessage,以适应不同数据格式的需求。...

    JMS学习笔记

    **JMS学习笔记** Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中交换异步消息的标准API。它提供了一种可靠的消息传递机制,使得应用程序可以在不互相依赖的情况下进行通信,从而...

    OSB中JMS配置及队列使用说明

    2. 创建队列接收类:创建队列接收类是监听 JMS 队列并接受消息的第二步,队列接收类是 JMS 消息的接收者。 监控 JMS 队列 监控 JMS 队列需要按照以下步骤进行: 1. 创建 Web 项目:创建 Web 项目是监控 JMS 队列...

    JMS消息模型 JMS学习.doc

    Java 消息服务(JMS,Java Message Service)是一种用于在分布式系统中进行异步数据交换的API,它为应用程序提供了标准的接口来发送和接收消息。JMS规范由JavaSoft(现为Oracle公司的一部分)制定,目的是促进不同...

    JMS简明教程创建消息 -> 发送消息 -> 接收消息 -> 读取消息

    任何终端之间都可以相互接受和发送消息。并且每个终端都必须遵守如下的规则 -> 创建消息 -> 发送消息 -> 接收消息 -> 读取消息 为什么要使用消息 理由很简单,消息是一个分布式的低耦合通讯方案。A发送一个消息到...

Global site tag (gtag.js) - Google Analytics