MOM主要特色:html
消息异步接受:相似于手机短信的行为,消息发送者不须要等待消息接受者的响应,减小软件多系统集成的耦合度;java
消息可靠接受:确保消息在消息中间件可靠保存,只要接受方接受到消息后才可删除,多个消息也能够组成原子事务;linux
JMS是java message service,java消息服务,是javaEE的一个技术。web
JMS定义了java中访问消息中间件的接口,可是没有实现,实现了JMS接口的消息中间件就称为JMS Provider,例如AvtiveMQ。spring
实现了JMS接口和规范的消息中间件。apache
JMS消息,JMS消息有如下三部分组成:windows
一、消息头:每一个消息头字段都有相应的getter和setter方法。安全
二、消息体:封装具体的消息数据。服务器
三、消息属性:若是须要除消息头以外的值,那么均可以使用消息属性。网络
消息的发送能够采用如下两种方式:
一、同步方式:经过调用的消费里的receive方法从目的地显式的提取消息,receive方法能够一直阻塞到消息到达。
二、异步方式:客户能够为消费者注册一个消息监听器,以定义在消息到达时所采起的动做。
JMS规范中定义了两种消息传递域:点对点(point-to-point)消息传递域,和发布/订阅(publish/subscribe)消息传递域。
一、点对点消息传递域的特色以下:
(1)、每一个消息只能有一个消费者,即每一个消息只能被其中一个消费者消费。
(2)、消息的生产者和消费者之间没有时间上的相关性。不管消费者在生产者发送消息时是否处于运行状态,它均可以提取消息。
如下是点对点的模型图:
(中间的就是队列,client 1就是生产者,它向队列中发送消息,client 2是消费者,它负责从队列中提取消息,消息消费完成后,队列中的消息就消失了)
二、发布/订阅消息传递域的特色:
(1)、每一个消息能够被多个消费者消费,前提是这些消息这已经对topic(主题进行了订阅)。
(2)、消息的生产者和消费者之间有时间上的相关性,订阅了该主题的消费者只能消费该主题发布的消息,若是此时该消费者没有设置消息持久化,且没有在线,
而主题已经完成了消息发布,那么该消费者不会收到那主题发布的消息。
如下是发布/订阅的模型图:
(topic为主题,client 1为生产者,它负责向主题发布消息,client 2和client 3均为订阅了该主题的消费者,但client 1发送消息,且client 2和3都在线,那么将能够收到消息)
message.setProperty("username",username);
message.getProperty("username");等。
2.JMS定义的属性
使用“JMSX”做为属性名的前缀,经过connection.getMetaData().getJMSXPropertyNames();方法返回全部链接支持JMSX的属性名字。
3.JMS定义的属性以下:
1)、JMSXUserID:发送消息的用户标识,发送时提供商设置。
2)、JMSXAppID:发送消息的应用标识,发送时提供商设置。
3)、JMSXDeliveryCount:转发消息重试次数,第一次是1,第二次是2...,依次类推,发送时提供商设置。
4)、JMSXGroupID:消息所在消息组的标识,由客户端设置。
5)、JMSXGroupSeq:组内消息的序号,第一是1,第二是2....依此类推,由客户端设置。
6)、JMSXProducerTXID:产生消息是事务的事务标识,发送时提供商设置。
7)、JMSXConsumerTXID:消费消息的事务的事务标识,接收时提供商设置。
8)、JMSXState:消息状态,1(等待)、2(准备)、3(到期)、4(保留)。
ActiveMQ是有Apache推出的,一款开源的、彻底支持JMS1.1和J2EE1.4规范的JMS Provider实现的消息中间件(Message Oriented Middleware, MOM)
最主要的功能就是:实现了JMS Provider,用来帮助实现高可用、高性能、易用、可伸缩和安全的企业级面向消息服务的系统。
bin (windows下面的bat和unix/linux下面的sh) 启动ActiveMQ的启动服务就在这里
conf (activeMQ配置目录,包含最基本的activeMQ配置文件)
data (默认是空的)
docs (index,replease版本里面没有文档)
example (几个例子)
lib (activeMQ使用到的lib)
webapps (系统管理员控制台代码)
webapps-demo(系统示例代码)
activemq-all-5.8.0.jar (ActiveMQ的binary)
user-guide.html (部署指引)
LICENSE.txt
NOTICE.txt
README.txt
activemq默认采用61616端口提供JMS服务,采用8161端口提供管理控制台服务,执行如下命令以便检验是否已经成功启动activemq服务:
能够访问管理员界面:http://localhost:8161/admin,默认用户名和密码admin/admin。若是你想修改用户名和密码的话,在conf/jetty-realm.properties中修改便可。
其中在导航菜单中,Queues是队列方式消息。Topics是主题方式消息。Subscribers消息订阅监控查询。Connections能够查看连接数,分别能够查看xmpp、ssl、stomp、openwire、ws和网络连接。Network是网络连接数监控。Send能够发送消息数据。
一、ActiviteMQ消息有3种形式:
JMS 公共 |
点对点域 |
发布/订阅域 |
ConnectionFactory |
QueueConnectionFactory |
TopicConnectionFactory |
Connection |
QueueConnection |
TopicConnection |
Destination |
Queue |
Topic |
Session |
QueueSession |
TopicSession |
MessageProducer |
QueueSender |
TopicPublisher |
MessageConsumer |
QueueReceiver |
TopicSubscriber |
(1)、点对点方式(point-to-point)
点对点的消息发送方式主要创建在 Message Queue,Sender,reciever上,Message Queue 存贮消息,Sneder 发送消息,receive接收消息.具体点就是Sender Client发送Message Queue ,而 receiver Cliernt从Queue中接收消息和"发送消息已接受"到Quere,确认消息接收。消息发送客户端与接收客户端没有时间上的依赖,发送客户端能够在任什么时候刻发送信息到Queue,而不须要知道接收客户端是否是在运行
(2)、发布/订阅 方式(publish/subscriber Messaging)
发布/订阅方式用于多接收客户端的方式.做为发布订阅的方式,可能存在多个接收客户端,而且接收端客户端与发送客户端存在时间上的依赖。一个接收端只能接收他建立之后发送客户端发送的信息。做为subscriber ,在接收消息时有两种方法,destination的receive方法,和实现message listener 接口的onMessage 方法。
发送消息的基本步骤:
(1)、建立链接使用的工厂类JMS ConnectionFactory
(2)、使用管理对象JMS ConnectionFactory创建链接Connection,并启动
(3)、使用链接Connection 创建会话Session
(4)、使用会话Session和管理对象Destination建立消息生产者MessageSender
(5)、使用消息生产者MessageSender发送消息
消息接收者从JMS接受消息的步骤
(1)、建立链接使用的工厂类JMS ConnectionFactory
(2)、使用管理对象JMS ConnectionFactory创建链接Connection,并启动
(3)、使用链接Connection 创建会话Session
(4)、使用会话Session和管理对象Destination建立消息接收者MessageReceiver
(5)、使用消息接收者MessageReceiver接受消息,须要用setMessageListener将MessageListener接口绑定到MessageReceiver消息接收者必须实现了MessageListener接口,须要定义onMessage事件方法。