ActiveMQ 学习笔记

ActiveMQ 学习笔记

activemq的特性

  1. 多种语言和协议编写客户端。

    语言: Java, C, C++, C#, Ruby, Perl, Python, PHP

    应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

  2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)

  3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

  4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resourceadaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上

  5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

  6. 支持通过JDBC和journal提供高速的消息持久化

  7. 从设计上保证了高性能的集群,客户端-服务器,点对点

  8. 支持Ajax

  9. 支持与Axis的整合

  10. 可以很容易得调用内嵌JMS provider,进行测试

代码思路总结

-- 用到的对象
1. ConnectionFactory:连接工厂,JMS用它创建连接
2. Connection:JMS客户端到JMS Provider的连接
3. Session:一个发送或接收消息的线程
4. Destination:消息的目的地;消息发送给谁
5. MessageProducer:消息发送者
6. TextMessage message
7. 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar

-- 编写步骤
1. 构造从工厂得到连接对象
   connectionFactory.createConnection()
2. 启动
   connection.start();
3. 获取操作连接
   session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
4. 消息的目的地
   destination = session.createQueue("FirstQueue");
5. 得到消息生成者【发送者】
   producer =session.createProducer(destination);
6. 设置不持久化,此处学习,实际根据项目决定
   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
7. 构造消息,此处写死,项目就是参数,或者方法获取
   sendMessage(session, producer);

ActiveMQ的多种部署方式

Master-Slave部署方式

  • shared filesystem Master-Slave

  • shared database Master-Slave

  • Replicated LevelDB Store (建议三个以上节点)

    注: 这种主备方式是ActiveMQ5.9以后才新增的特性,使用ZooKeeper协调选择一个node作为master。被选择的master broker node开启并接受客户端连接

Broker-Cluster部署方式

  • 前面的 Master-Slave 的方式虽然能解决多服务热备的高可用问题,但无法解决负载均衡和分布式的问题。 Broker-Cluster 的部署方式就可以解决负载均衡的问题。

    1) static Broker-Cluster部署

    在activemq.xml文件中静态指定Broker需要建立桥连接的其他Broker:

    1.首先在Broker-A节点中添加networkConnector节点:


Master-Slave与Broker-Cluster相结合的部署方式

  • Master-Slave的部署方式虽然解决了高可用的问题,但不支持负载均衡,Broker-Cluster解决了负载均衡,但当其中一个Broker突然宕掉的话,那么存在于该Broker上处于Pending状态的message将会丢失,无法达到高可用的目的。

  • 由于目前ActiveMQ官网上并没有一个明确的将两种部署方式相结合的部署方案,所以我尝试者把两者结合起来部署:

ActiveMQ 学习笔记_第1张图片

部署的配置修改

     这里以Broker-A + Broker-B建立cluster,Broker-C作为Broker-B的slave为例:

1)首先在Broker-A节点中添加networkConnector节点:

 
    


2)修改Broker-A节点中的服务提供端口为61616:


    


3)在Broker-B节点中添加networkConnector节点:

 
    


4)修改Broker-B节点中的服务提供端口为61617:


    


5)修改Broker-B节点中的持久化方式:


    


6)在Broker-C节点中添加networkConnector节点:

 
    


7)修改Broker-C节点中的服务提供端口为61618:


    


8)修改Broker-B节点中的持久化方式:


    


9)分别启动broker-A、broker-B、broker-C,因为是broker-B先启动,所以“/localhost/kahadb”目录被lock住,broker-C将一直处于挂起状态,
当人为停掉broker-B之后,broker-C将获取目录“/localhost/kahadb”的控制权,重新与broker-A组成cluster提供服务。

你可能感兴趣的:(ActiveMQ 学习笔记)