`
eksliang
  • 浏览: 599016 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JMS 五种消息体的发送/接收(三)

    博客分类:
  • JMS
阅读更多

转载请出自出处:http://eksliang.iteye.com/blog/2242642

JMS与ActiveMQ简介(一)中介绍了JMS消息的组成,由三个部分组成,head(头)、properties(属性)、body(包体),其中body中存放要发送给接收应用程序的内容。每个消息接口特定于它所支持的内容类型。JMS为不同类型的内容提供了他们各自的消息类型,但是所有消息都派生自Message接口。

  1. StreamMessage   一种主体中包含Java基元值流的消息。其填充和读取均按顺序进行。
  2. MapMessage       一种主体中包含一组键--值对的消息。没有定义条目顺序。
  3. TextMessage       一种主体中包含Java字符串的消息(例如,XML消息)。
  4. ObjectMessage    一种主体中包含序列化Java对象的消息。
  5. 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();  
	}
}

 

 

 

分享到:
评论

相关推荐

    JMS消息队列机制及案例

    它定义了生产、发送、接收和读取消息的标准API,使得不同的消息中间件提供商可以提供兼容的实现,便于开发者在不同中间件之间进行迁移。JMS的核心概念包括消息、生产者、消费者、队列和主题。 1. **消息**:JMS中的...

    消息中间件和JMS消息服务.pdf

    3. **JMS消息结构**:JMS消息主要包括消息头、属性和消息体三个部分。 - **消息头**:包含消息的识别信息和路由信息。 - `JMSDestination`:消息发送的目的地。 - `JMSDeliveryMode`:指定消息是否需要持久化。 ...

    利用soapUI3.5测试JMS消息

    首先,Java消息服务(JMS)是一种API,它提供了一种标准的方式来访问消息中间件,使得应用程序可以在不同的平台之间发送和接收消息。JMS支持两种主要的消息模型:点对点(Point-to-Point)和发布/订阅(Publish/...

    JMS规范教程pdf

    它为分布式系统提供了消息传递和消息排队的功能,支持点对点和发布/订阅两种模型,使得应用程序可以在网络上发送和接收异步消息。 **1.2 什么是JMS中的消息(MESSAGING)?** 在JMS中,消息是指由一个或多个消息...

    JMS学习笔记精心总结

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

    JMS消息服务代码(java message service)

    Java Message Service(JMS)是Java平台中用于创建、发送、接收和读取消息的应用程序接口。它提供了一种标准的方式来解耦应用程序之间的通信,使得它们可以异步地交换信息,提高了系统的可扩展性和可靠性。在JMS中,...

    消息中间件和jms消息服务

    JMS消息由消息头、属性和消息体三部分组成。消息头包含了识别和路由信息,如JMSDestination、JMSMessageID等,这些由发送方或JMS Provider设置。属性允许用户自定义额外的信息,而消息体则承载实际的数据内容。 在...

    Java+Message+Service+JMS+java消息服务

    消息由头域、属性和体三部分组成,头域包含发送者和接收者的信息,属性可以增加额外的元数据,而体则携带实际的消息内容。 2. **消息生产者(Message Producer)**:消息生产者是创建并发送消息的JMS客户端。它们...

    JMS demo 及 资料

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的标准化接口,它允许应用程序创建、发送、接收和读取消息。JMS被设计用来在分布式环境中传递可靠的数据,使得不同系统之间可以进行...

    JMS 简单使用指南

    JMS允许应用程序创建、发送、接收和读取消息,有效地处理系统间的解耦和消息传递。以下是对JMS的一些关键知识点的详细解释: 1. **JMS供应商**: - **OpenJMS**:这是一个开源的JMS实现,遵循JMS 1.0.2规范,适合...

    java中间件之jms

    JMS消息由消息头、消息属性和消息体三部分组成: **1.3.1 消息头** 消息头包含消息的识别信息和路由信息,具体属性如下: - **JMSDestination**:消息发送的目的地,自动分配。 - **JMSDeliveryMode**:传送模式...

    JMS规范1.1

    JMS(Java消息服务)是Java平台上用于消息传递的一组API,它允许应用程序创建、发送、接收和读取消息。它是一种与厂商无关的API,使分布式系统之间可以以异步方式通信。JMS规范1.1版本详细说明了如何在Java环境中...

    JMS 1.1 API JAVADOC 中文版 chm

    JMS 1.1 API是这个规范的一个版本,提供了在分布式环境中发送和接收消息的机制,它是Java应用程序与其他系统进行交互的重要工具,尤其在处理大量并发和数据传输时。 JMS 1.1 API文档主要包含了以下关键概念和接口:...

    JMS消息服务详解

    JMS客户端使用Java编写,负责发送和接收消息;非JMS客户端可能使用消息系统的原生API。消息是应用程序间通信的核心,JMS提供者是实现JMS规范的消息系统。被管理的对象,如ConnectionFactory和Destination,由管理员...

    有关JMS/或j2ee技术的说明与问题

    JMS允许应用程序创建、发送、接收和读取消息,这些消息可以在分布式环境中传递,确保数据的可靠传输。 **JMS基本概念:** 1. **消息(Message)**:JMS的核心是消息,它是数据的载体,可以是文本、对象或者二进制...

    JMS与MDB介绍

    JMS客户端通过ConnectionFactory创建连接,Session进行消息操作,MessageProducer发送消息,MessageConsumer接收消息。MDB(Message Driven Bean)是Java EE中处理JMS消息的组件,实现了消息驱动的并发处理,增强了...

    JMS.rar_jms

    在JMS技术文档中,你可能会找到关于如何设置JMS环境、创建连接工厂、建立会话、创建消息、发送和接收消息、处理不同消息类型(如文本消息、对象消息、流消息等)、以及如何使用消息监听器进行异步处理的详细教程和...

    spring jms tomcat 异步消息传递入门实例

    通过`org.springframework.jms.core.JmsTemplate`,我们可以方便地发送和接收消息。配置JMS模板,需要指定ConnectionFactory,它是连接JMS提供者的桥梁。Spring还支持声明式事务管理,确保消息传输的可靠性。 2. **...

    一个很好的jms教程

    Java Message Service(JMS)是Java平台中用于创建、发送、接收和读取消息的应用程序接口。它提供了一种标准的方式,使得不同的Java应用程序能够通过消息传递进行异步通信。JMS教程是学习这一核心技术的关键,尤其...

    消息中间件和JMS消息服务.rar

    消息头、消息属性和消息体构成了JMS消息的基本结构。 在实际应用中,常见的JMS实现包括Apache ActiveMQ、IBM WebSphere MQ和RabbitMQ等。这些中间件提供了高可用性、负载均衡和持久化等功能,确保即使在服务器故障...

Global site tag (gtag.js) - Google Analytics