点对点式
在点对点式的消息通信中,消息代理获得发送者发送的消息后,将消息存入一个队列里,当有消息接收者接收消息时,将从队列里取出消息传递给接收者,这时队列中清除该消息。
在点对点式的消息通信中,确保的是每一条消息只有唯一的发送者和接收者,但并不能说明只有一个接收者可以从队列里接收消息。这是因为队列里有多个消息,点对点式的消息通信只保证每一条消息只有唯一的发送者和接收者。
发布/订阅式
多接收者是消息通信中一种更加灵活的方式,而点对点式的消息通信只保证每一条消息只有唯一的接收者。这时我们可以使用发布/订阅式的消息通信解决多接收者的问题。和点对点式不同,发布/订阅式是消息发送者将消息发送到主题,而多个消息接收者监听这个主题。此时的消息发送者叫做发布者,接收者叫做订阅者。
JMS(Java Messaging Service)即Java消息服务,是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。
1.JMS元素
2.JMS的应用接口
1)JMS消息代理实现
2)JMS客户
3)JMS生产者
4)JMS消费者
5)JMS消息
6)JMS队列
7)JMS主题
1)JMS消息代理实现
连接面向消息中间件的,JMS消息代理接口的一个实现。JMS的消息代理实现可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。开源的JMS实现有Apache ActiveMQ、JBoss 社区所研发的 HornetQ、The OpenJMS Group的OpenJMS等等实现。
2)JMS客户
生产或消费基于消息的Java应用程序或对象。
3)JMS生产者
创建并发送消息的JMS客户。
4)JMS消费者
接收消息的JMS客户。
5)JMS消息
包括可以在JMS客户之间传递的数据对象。JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收一些不同形式的数据,提供现有消息格式的一些级别的兼容性。常见的消息格式有StreamMessage(指Java原始值的数据流消息)、MapMessage(映射消息)、TextMessage(文本消息)、ObjectMessage(一个序列化的Java对象消息)、BytesMessage(字节消息)。
6)JMS队列
一个容纳那些被发送的等待阅读的消息区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。
7)JMS主题
一种支持发送消息给多个订阅者的机制。
JMS的应用接口
1)ConnectionFactory接口(连接工厂)
2)Connection 接口(连接)
3)Destination接口(目的地)
4)Session接口(会话)
5)MessageConsumer接口(消息消费者)
6)MessageProducer接口(消息生产者)
7)Message接口(消息)
1)ConnectionFactory接口(连接工厂)
用户用来创建到JMS消息代理实现的连接的被管对象。JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改。管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据目的地的不同,用户将使用队列连接工厂,或者主题连接工厂。
2)Connection 接口(连接)
连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS消息代理实现(提供者)的连接。根据不同的连接类型,连接允许用户创建会话,以发送和接收队列和主题到目的地。
3)Destination接口(目的地)
目的地是一个包装了消息目的地标识符的被管对象,消息目的地是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员创建这些对象,然后用户通过JNDI发现它们。和连接工厂一样,管理员可以创建两种类型的目的地,点对点模型的队列,以及发布者/订阅者模型的主题。
4)Session接口(会话)
表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。会话的好处是它支持事务。如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务之前,用户可以使用回滚操作取消这些消息。一个会话允许用户创建消息,生产者来发送消息,消费者来接收消息。
5)MessageConsumer接口(消息消费者)
由会话创建的对象,用于接收发送到目的地的消息。消费者可以同步地(阻塞模式),或(非阻塞)接收队列和主题类型的消息。
6)MessageProducer接口(消息生产者)
由会话创建的对象,用于发送消息到目的地。用户可以创建某个目的地的发送者,也可以创建一个通用的发送者,在发送消息时指定目的地。
7)Message接口(消息)
是在消费者和生产者之间传送的对象,也就是说从一个应用程序传送到另一个应用程序。一个消息有三个主要部分:
消息头(必须):包含用于识别和为消息寻找路由的操作设置。
一组消息属性(可选):包含额外的属性,支持其他消息代理实现和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。
一个消息体(可选):允许用户创建五种类型的消息(文本消息、映射消息、字节消息、流消息和对象消息)。