JMS & ActiveMQ 学习

1 JMS知识回顾
1.1 JMS基本构件
  1 连接工厂
  2 连接
  3 会话
  4 目的地
    客户用来指定它生产的消息的目标和它消费的消息的来源的对象。
    JMS1.0.2规范定义了两种消息传递域:点对点(PTP)、发布订阅
    在点对点消息传递域中,目的地被称为队列(queue);
    在发布订阅消息传递域中,目的地被称为主题(topic)
  5 消息生产者
  6 消息消费者
    消息的消费可以采取以下两种方法之一:
      同步消费:调用receive方法,显示的从目的地提取消息
      异步消费:为消费者注册消息监听器,以定义消费到达时所采取的动作。
  7 消息
    JMS消息分为三个部分:
      消息头:每个头字段有相应的getter和setter方法
      消息属性:保存消息头以外的字段值
      消息体:JMS定义的消息类型:TextMessage, MapMessage, BytesMessage, StreamMessage, ObjectMessage.

1.2 JMS的可靠性机制
  1 确认
    事务性会话中,当一个事务被提交的时候,确认自动发生。
    在非事务性会话中,消息何时被确认取决于创建会话时的应答模式。
      Session.AUTO_ACKNOWLEDGE
      Session.CLIENT_ACKNOWLEDGE
      Session.DUPS_ACKNOWLEDGE
  2 持久性
    JMS支持两种消息提交模式
      PERSISTENT
      NON_PERSISTENT
  3 优先级
    10个级别,0最低,9最高
  4 消息过期
    可以设置消息在一段时间后过期,默认是永不过期
  5 临时目的地
  6 持久订阅
  7 本地事务
    在JMS客户端,可以使用本地事务来组合消息的发送和接收。
    值得注意的是,消息的生产和消费不能包含在同一个事务中.

1.3 JMS规范的变迁
  JMS最新版本1.1和1.0.2版本之间最大的差别是:
  JMS1.1通过统一的消息传递域简化了消息的传递。
  JMS公共        点对点域          发布订阅域
  ConnectionFactory   QueueConnectionFactory   TopicConnectionFactory
  Connection      QueueConnection       TopicConnection
  Destination       Queue             Topic
  Session         QueueSession         TopicSession
  MessageProducer    QueueSender        TopicPublisher
  MessageConsumer  QueueReceiver        TopicSubscriber

--------------------------------------------------------------------------------------------------
2. ActiveMQ
2.1 Broker
2.1.1 Running Broker
  基本命令:
    activemq
      使用默认的"xbean:activemq.xml"作为broker配置文件

    activemq xbean:file:C:/ActiveMQ/conf/broker2.xml
      使用绝对路径确定broker的配置文件位置

    activemq broker:(tcp://localhost:61616,network:tcp://localhost:5000)?persistent=false
      Runs a broker with 1 transport connector and 1 network connector with persistent disabled.

2.1.2 Embedded Broker
  可以使用编程方式启动broker,如
    BrokerService broker = new BrokerService();
    broker.addConnector("tcp://localhost:61616");
    broker.start();

  如果希望在同一个JVM内访问broker,可以使用VM Transport,URI是:vm://brokerName

  也可以通过BrokerFactory来创建broker,如
    BrokerService broker = BrokerFactory.createBroker(new URI(someURI));

2.1.3 Monitor Broker
2.1.3.1 JMX
2.1.3.2 Web Console
  ...处于安全性考虑,web console可以被部署到不同于ActiveMQ的进程中...
  ...例如把active-web-console.war部署到一个单独的web容器中(Tomcat,Jetty等)...
2.1.3.3 Advisory Message
  Advisory Messages可以被想象成某种的管理通道,
  通过它你可以得到关于JMS provider、producers、consumers、destinations的信息。
  Advisory topics都使用ActiveMQ.Advisory.这个前缀。

2.1.3.4 Command Agent
  介绍Command Agent前首先简单介绍XMPP(Jabber)协议。
  这是一种基于XML的即时通信协议,有Jabber软件基金会开发。
  可以在配置文件中通过增加transportConnector来支持XMPP协议。如:
  <broker xmlns="http://activemq.org/config/1.0">
    <transportConnectors>
      ...
      <transportConnectors name="xmpp" uri="xmpp://localhost:61222"/>
    </transportConnectors>
  </broker>
  推荐XMPP客户端Spark(http://www.igniterealtime.org/)

  从4.2版本起,ActiveMQ支持Command Agent。

2.1.3.5 Visualization plugin

2.2 Transport
  ActiveMQ目前支持的transport有:
    VM Transport
    TCP Transport
    SSL Transport
    Peer Transport
    UDP Transport
    Multicast transport
    HTTP and HTTPS Transport
    Failover Transport
    Fanout Transport
    Discovery Transport
    ZeroConf Transport
    等。

2.2.1 VM Transport
  在MV内部通信,避免了网络传输的开销。
  此时采用的连接不是socket连接,而是直接地方法调用。
  第一个创建VM连接的客户会启动一个Embbed VM broker,。。。

2.2.2 TCP Transport
  允许客户端通过TCP socket连接到远程的broker。

2.3 Persistence
2.3.1 AMQ Message Store
  AMQ Message Store是ActiveMQ5.0缺省的持久化存储。
  Message commands被保存到transactional journal(由rolling data logs组成)。
  Messages被保存到data logs中,同时被reference store进行索引以提高存取速度。
2.3.2 Kaha Persistence
  一个专门针对消息持久化的解决方案。
  它对典型的消息使用模式进行了优化。
2.3.3 JDBC Persistence

2.4 Security
  ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换。
2.4.1 Simple Authentication Plugin
2.4.2 JAAS Authentication Plugin
2.4.3 Custom Authentication Implementation
2.4.4 Authorization Plugin
  可以通过Authorization Plugin为认证后的用户授权。

2.5 Clustering
  ActiveMQ从多种不同的方面提供了集群的支持。
2.5.1 Queue consumer clusters
2.5.2 Broker clusters
  在ActiveMQ中使用failover://协议来实现这个功能。
2.5.3 Master Slave
  目前ActiveMQ推荐的高可靠性和容错的解决方案。

2.6 Features
  ActiveMQ包含了很多功能强大的特性,下面简要介绍几个:
2.6.1 Exclusive Consumer
2.6.2 Message Groups
  官方文档的说法,它是Exclusive Consumer功能的增强。
  逻辑上,Message Groups可以看成是一种并发的Exclusive Consumer。
2.6.3 JMS Selectors
  用于在订阅中,基于消息属性对进行消息的过滤。
  例如:
    consumer = session.createConsumer(destination, "JMSType='car' AND weight > 2500");
2.6.4 Pending Message Limit Strategy
  prefetch机制:ActiveMQ通过它来提高性能,即客户端的内存中可能会缓存一定数量的消息。
2.6.5 Composite Destinations
  允许用一个虚拟的destination代表多个destinations。
  例如你可以通过composite destinations在一个操作中同时向12个queue发送消息。
  多个destination之间采用“,”分割。
2.6.6 Mirrored Queues
  ActiveMQ支持Mirrored Queues。Broker会把发送到某个queue的所有消息转发到一个名称类似的topic,
  因此监控程序可以订阅这个mirrored queue topic。
2.6.7 Wildcards
  用来支持联合的名字分层体系(federated name hierarchies)
  它不是JMS规范的一部分,而是ActiveMQ的扩展。
2.6.8 Async Sends
2.6.9 Dispatch Policies
2.6.9.1 Round Robin Dispatch Policy
2.6.9.2 Strict Order Dispatch Policy
2.6.10 Message Cursors
2.6.11 Optimized Acknowledgement
2.6.12 Producer Flow Control
2.6.13 Message Transformation

参考:
ActiveMQ in Action http://wenku.baidu.com/view/a7a05927a5e9856a5612609a.html

posted @ 2012-05-02 22:30  万法自然~  阅读(542)  评论(0)    收藏  举报