1.0首先先介绍一下JMS,Java Message Service(JMS)是SUN提出的旨在统一各类MOM(Message-Oriented Middleware )系统接口的规范,它包含点对点(Point to Point,PTP)和发布/订阅(Publish/Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。java
简单的说,JMS制定了一个发消息的规范。是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。 ActiveMQ是Apache出品的开源项目,它是JMS规范的一个实现。服务器
1.1 jms的做用、网络
在不一样应用之间进行通讯或者从一个系统传输数据到 另一个系统。两个应用程序之间,或分布式系统中发送消息,进行异 步通讯。 这类问题有不少解决方案 ,好比DB、SOA、Socket通讯、RMI,等,但我 们须要根据项目的限制以及功能和性能的须要做出选择。 JMS的应用场景:规模和复杂度较高的分布式系统。 (1)同步通讯:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;session
(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;若是因为服务对象崩溃或者网络故障致使客户的请求不可达,客户会接收到异常;分布式
(3)点对点通讯:客户的一次调用只发送给某个单独的目标对象。ide
1.2 jms的模型性能
Java消息服务应用程序结构支持两种模型:线程
1.点对点模型(基于队列) 每一个消息只能有一个消费者。消息的生产者和消费者之间没有时间上的 相关性.能够由多个发送者,但只能被一个消费者消费。 一个消息只能被一个接受者接受一次 生产者把消息发送到队列中(Queue),这个队列能够理解为电视机频道(channel) 在这个消息中间件上有多个这样的channel 接受者无需订阅,当接受者未接受到消息时就会处于阻塞状态中间件
2. 发布者/订阅者模型(基于主题的) 每一个消息能够有多个消费者。 生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消 费自它订阅以后发布的消息. 容许多个接受者,相似于广播的方式 生产者将消息发送到主题上(Topic) 接受者必须先订阅 注:持久化订阅者:特殊的消费者,告诉主题,我一直订阅着,即便网络断开,消息服务器也记住全部持久化订阅者,若是有新消息,也会知道一定有人回来消费。对象
关于点对点有一种状况是,生产者一直发消息到activemq的队列上,而消息者又一直不消费队列上的消息时,activemq的服务器会报错。
1.3 jms的公共接口
1.4 jms的基本构件
ConnectionFactory:链接工厂是客户用来建立链接的对象,例如ActiveMQ提供的 ActiveMQConnectionFactory。
Connection: JMS Connection封装了JMS 客户端到JMS Provider 的链接与JMS提供者之间的一个虚拟的链接。
Session: JMS Session是生产和消费消息的一个单线程上下文。会话用于建立 消息的生产者(producer),消费者(consumer),消息(message)等, 会话,是一个事务性的上下文。 消息的生产和消费不能包含在同一个事务中。
MessageProducer:消息生产者,MessageProducer 由Session 对象建立的用来发送消息的对象
MessageConsumer :消息消费者,MessageConsumer 由Session 对象建立的用来发送消息的对象
Message :JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、 StreamMessage和ObjectMessage。
Destination:消息目的地,是用来指定生产的消息的目标和它消费的消息的来源的对象。
消息队列:Queue 点对点的消息队列 消息主题:Tipic 发布订阅的消息队列
消息主题:Tipic 发布订阅的消息队列
2. java 简单实现actviemq 进行发送和接收消息
createMessage()是对发送的消息进行处理
接收的程序也相似session.MessageConsumer(destination),destination对象指定的是队列名称,消息的来源