JMS简介及Ipedo Feeds(1)

原创 2004年07月05日 16:07:00

1. 前言

当今社会,信息无处不在。他们的载体又大多是不同的系统。那如何在这些系统间进行信息交互呢?答案就是MOM(Message-Oriented Middleware)MOM允许两个或更多个企业级应用间以消息的形式来交互信息。而不同的MOM厂商提供了不同的API给开发人员来接受和发送消息、定义了不同的网络协议、管理工具等。为了统一这些关于消息的相关内容,SUN提出了JMS(Java Message Service)规范。JMS类似于JDBC,能够让应用程序开发人员重用相同的API来访问不同的系统。而实现了JMS规范(http://java.sun.com/products/jms/docs.html)的实体称为JMS provider,也就是消息交互之间的桥梁。在JMS规范中JMS client分为消息发送者(生产者)和消息接受者(消费者)

 

Fig1. JMS系统图

2. JMS消息组成

 

Fig2. JMS消息组成

从上图可以看出JMS定义了以下三种组成部分。

A.     Header: 包括用于描述谁创建了这个消息、何时创建、多长时间内该消息有效以及消息的destination(Topic queue)metadata信息。每一个header信息都有setget接口。参见下面的代码

   public interface Message {
      public Destination getJMSDestination( ) throws JMSException;
      public void setJMSDestination(Destination destination)throws JMSException;
      public int getJMSDeliveryMode( ) throws JMSException;
      public void setJMSDeliveryMode(int deliveryMode)throws JMSException;
      public String getJMSMessageID( ) throws JMSException;
      public void setJMSMessageID(String id) throws JMSException;
      public long getJMSTimestamp( ) throws JMSException;
      public void setJMSTimestamp(long timestamp) throws JMSException;

     .........

}

而其中有些header信息是由JMS provider自动设定的,也就是说开发人员调用set方法设定的值将会被JMS provider覆盖。比如JMSDestination(Topic or queue)JMSDeliveryMode(persistent or nonpersistent)等。另一些JMSReplyToJMSTypeheader信息则是由开发人员设定。

 

B. Properties: Properties的作用类似于一些额外的header信息。Property的值可以是boolean, byte, short, int, long, float, double, StringJMS接口也定义了这些类型的propertygetset方法。Properties又分为三类:

1.  应用相关的Property, 比如下面代码段中的username这个property,

TextMessage message = pubSession.createTextMessage( );

message.setText(text);

message.setStringProperty("username",username);

publisher.publish(message);

username在其他的应用中是没有意义的。

2.  JMS定义的property,这些property1中所讲的property具有相同的特性,只不过它们是由JMS provider设定,其实就是可选的headerProvider可以任意选择下列的property进行支持,或者一个也不支持。

     ·  JMSXUserID

·  JMSXAppID

·  JMSXProducerTXID

·  JMSXConsumerTXID

·  JMSXRcvTimestamp

·  JMSXDeliveryCount

·  JMSXState

·  JMSXGroupID

·  JMSXGroupSeq

3Provider相关的property,每一个JMS provider还可以定义一系列的私有的property,由客户端或provider自己设定,每一个JMS provider相关的property都以JMS_开头,后面跟property的名字。

同时,provider可以根据消息的headerproperty来定义消息的选择器(Message Selectors),达到消息过滤的功能。比如下面的选择器(黑体部分)用来告诉消息服务器只发送不包含username这个property等于William的消息给消息消费者:

TopicSubscriber subscriber =

session.createSubscriber(chatTopic, " username != 'William' ",false);

消息选择器基于SQL中的where子句。

 

C Payload: 就是消息包含的真正的数据。JMS定义了五种消息类型接口TextMessage,

StreamMessage, MapMessage, ObjectMessage, and BytesMessage,它们都继承于Message 这个interfaceTextMessage使用字符串作为消息的payloadObjectMessage使用可序列化的对象作为消息的payloadBytesMessage使用byte数组作为消息的payloadStreamMessage使用原始数据类型的流作为消息的payloadMapMessage使用name-value对作为消息的payload下面的代码说明了如何设置text message并发送这个message,其他类型的消息类似:

TextMessage textMessage = session.createTextMessage( );

textMessage.setText("Hello!");

topicPublisher.publish(textMessage);

...

TextMessage textMessage = session.createTextMessage("Hello!");

queueSender.send(textMessage);

 

JMS简介与ActiveMQ实战

感谢有奉献精神的人 转自:http://boy00fly.iteye.com/blog/1103586 1. JMS架构   Java 消息服务(Java Messag...
  • zhangliao613
  • zhangliao613
  • 2016年03月28日 17:06
  • 469

深入浅出JMS(1)——JMS简介

如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了。为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随...
  • vv354123
  • vv354123
  • 2015年09月09日 23:55
  • 236

[ActiveMQ实战]基于JMS的pub/sub传播机制

上篇博客介绍了activemq基于JMS的点对点消息传播机制的实现,这里介绍另一个发布/订阅方式实现。 一、发布订阅模型     就像订阅报纸。我们可以选择一份或者多份报纸,比如:北京日报、人民日报。...
  • ggibenben1314
  • ggibenben1314
  • 2015年08月20日 20:27
  • 1860

《转》OpenWRT的Feeds分析学习

转自:http://www.voidcn.com/blog/u012174021/article/p-3089678.html之前编译OpenWRT的时候,对于feeds都是直接按照教程上给的写好,也...
  • fzxy002763
  • fzxy002763
  • 2016年11月21日 19:27
  • 1553

深入浅出JMS(一)——JMS简介

如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了。为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随...
  • ketonfly
  • ketonfly
  • 2014年09月20日 18:54
  • 319

深入浅出JMS(一)——JMS简介

如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了。为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随...
  • zxh66
  • zxh66
  • 2015年07月28日 16:24
  • 219

深入浅出JMS(一)——JMS简介

目录(?)[-] 企业消息系统 企业消息系统的好处提供消息灵活性松散耦合 JMS是什么 JMS的目标 JMS两种消息模型 点到点模型发布订阅模型 ...
  • yijiayi810
  • yijiayi810
  • 2014年11月14日 11:07
  • 160

深入浅出JMS(一)——JMS简介

JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通...
  • robby_chan
  • robby_chan
  • 2015年06月06日 12:02
  • 341

深入浅出JMS(一)——JMS简介

文章转自:http://blog.csdn.net/aking21alinjuju/article/details/6051421  如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电...
  • a1259109679
  • a1259109679
  • 2015年06月08日 14:46
  • 165

深入浅出JMS(一)---JMS简介

如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了。为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随...
  • Yiran8935
  • Yiran8935
  • 2017年01月05日 17:31
  • 195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JMS简介及Ipedo Feeds(1)
举报原因:
原因补充:

(最多只允许输入30个字)