大家好,欢迎来到IT知识分享网。
一、JMS介绍
二、JMS的体系架构
JMS由以下元素组成:
1、JMS提供者
连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。JMS服务提供者实现消息队列和通知,同时实现消息管理API。JMS已经是J2EE API的一部分了,J2EE服务器提供JMS服务。
2、JMS客户
生产或消费基于消息的Java的应用程序或对象。
3、JMS生产者
创建并发送消息的JMS客户。
4、JMS消费者
接收消息的JMS客户。
5、JMS消息
包括可以在JMS客户之间传递数据的对象。消息是服务提供者和客户端之间传递信息所使用信息单元。JMS消息由以下三部分组成:
- 消息头(header)—JMS消息头包含许多字段,它们是消息发送后由JMS提供者或消息发送者产生的,用来表示消息、设置优先权和失效时间等等,并且为消息确定路由。
- 属性(property)—用来添加删除消息头以外的附加消息。
- 消息体(body)—JMS中定义了5种消息体:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。
6、JMS队列
一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。
7、JMS主题
一种支持发送消息给多个订阅者的机制。
三、JMS的五种消息类型
JMS1.1规范中规定了五种JMS类型:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。下面我们来逐个介绍:
1.创建一个TextMessage
2.解包一个TextMessage,去解包一个TextMessage类型的消息,客户端可以使用Message.getText方法:
3.创建一个BytesMessage
4.解包一个BytesMessage,当接收到一个ByteMessage时,可以使用下面的方式来解包:
5.创建一个MapMessage
6.解包一个MapMessage
7.创建一个StreamMessage
8.解包一个StreamMessage
9.创建一个ObjectMessage
10.解包ObjectMessage
四、JMS对象模型和应用程序接口
JMS对象模型包含如下几个要素:
1.连接工厂。连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。
2.JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。
3.JMS会话。JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。
4.JMS目的。JMS目的(Destination),又称为消息队列,是实际的消息源。
② 发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。
应用程序接口:
ConnectionFactory 接口(连接工厂)
用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改。管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂。
Connection 接口(连接)
连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的连接。根据不同的连接类型,连接允许用户创建会话,以发送和接收队列和主题到目标。
Destination 接口(目标)
目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员创建这些对象,然后用户通过JNDI发现它们。和连接工厂一样,管理员可以创建两种类型的目标,点对点模型的队列,以及发布者/订阅者模型的主题。
Session 接口(会话)
表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。会话的好处是它支持事务。如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务之前,用户可以使用回滚操作取消这些消息。一个会话允许用户创建消息,生产者来发送消息,消费者来接收消息。
MessageConsumer 接口(消息消费者)
由会话创建的对象,用于接收发送到目标的消息。消费者可以同步地(阻塞模式),或(非阻塞)接收队列和主题类型的消息。
MessageProducer 接口(消息生产者)
由会话创建的对象,用于发送消息到目标。用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。
Message 接口(消息)
是在消费者和生产者之间传送的对象,也就是说从一个应用程序传送到另一个应用程序。
五、JMS通信方式
JMS通信方式分为点对点通信和发布/订阅方式
1.点对点方式(point-to-point)
2.发布/订阅 方式(publish/subscriber Messaging)
六、JMS消息传递方式
topicPublisher.publish (message, DeliveryMode.PERSISTENT, 8, 10000); //Pub-Sub
或
queueSender.send(message,DeliveryMode.PERSISTENT, 8, 10000);//P2P
这个代码片断,有两种消息模型,映射递送方式是持久的,优先级为加快型,生存周期是10000 (以毫秒度量)。如果生存周期设置为零,这则消息将永远不会过期。当消息需要时间限制否则将使其无效时,设置生存周期是有用的。
七、JMS提供者
要使用Java消息服务,你必须要有一个JMS提供者,管理会话和队列。既有开源的提供者也有专有的提供者。
开源的提供者包括:
专有的提供者包括:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129306.html