jms学习笔记

   jms定义了,java程序创建,发送,接收,读取消息系统中消息的标准接口。
什么是消息系统中的消息?这里的消息是有特定含义的,这些消息是被企业应用所消费的,不是人们日常生活中所消费的消息,有异步请求,报告,事件。
   符合jms规范的消息系统有很多,比如有Sun MQ,IBM MQ,BEA MQ,Apache ActiveMQ,它们的底层实现技术各不相同,如此说来,写的每一个jms客户端只能对应一个消息系统?但是,别忘了java是跨平台性的,在jms里,我们也应该有办法,让jms客户端跨平台,这可以由被jms消息系统提供的被管理对象来实习。有了被管理对象,就实现了消息系统具体实现对jms客户端的透明,jms不直接与消息系统通信,而是通过被管理的对象与消息系统通信,两个主要被管理对象ConnectionFactory 和 Destination,ConnectionFactory 用来控制jms客户端与jms消息系统的连接,Destination 用来控制客户端把消息发送到系统的具体位置,以及客户端从系统取消息的具体位置。这两个对象由系统管理员通过jndi的方式存储。
   这是一个生产-消费的时代,在jms消息系统里也有消息生产者和消息消费者的概念,消息生产者应该只关注消息的合法生产,消费者只关注消息的合法消费,对于消息的具体管理应该由系统负责。消息生产者发出一条消息,这条消息是发给某一个应用还是被所有应用所共享?这就要具体问题具体分析,有两种主要的消息模式,P2P模式,PUB/SUB模式,P2P模式中,一条消息只能被一个应用所消费,消费被放在queue中,P/S模式中,一条消息能被N条应用所共享。P2P和P/S模式又可称之为消息域,每个消息域又定了自己的一套概念接口。
   消息的数据结构可分为,消息头,消息体,消息体即消息的主题内容,jms提供五种类型的消息体。消息的可控性由消息头决定,消息头包含消息头字段和消息属性。消息头字段和消息属性使得客户端通过消息选择器可以有效的过滤筛选所需要的消息。任何一JMSX开头的属性名都是JMS定义属性名,任何以JMS_开头的属性名都是JMS提供者定义属性名,其他为应用指定属性名。
   


你可能感兴趣的:(java,jms)