activemq开发手册

一、ActiveMQ简介
■ActiveMQ是什么
      ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE1.4规范的JMS Privider实现的消息中间件(Message Oriented Middleware, MOM)
■ActiveMQ能干什么
    最主要的功能就是:实现JMS Provider, 用来帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息服务的系统。
■ActiveMQ特点
完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)
支持多种传输协议:in-VM, TCP、SSL、NIO、UDP、JGroups, JXTA
可插拔的体系结构,可用灵活定制,如消息存储方式、安全管理等
很容易和Application Server集成使用
多种语言和协议编写客户端。语言:Java, C, C++, C#, Ruby, Perl等等
从设计上保证了高性能的集群,客户端-服务器,点对点
可以很容易和Spring结合使用
支持通过JDBC和journal提供高速的持久化
支持与Axis的整合
二、消息中间件
■MOM基本功能:将信息以消息的形式,从一个应用传送到另一个或多个应用程序。
■MOM主要特点:
1、消息异步接收, 类似手机短信的行为,消息发送者不需要等待消息接受者的相应,减少软件多系统集成的耦合度;
2、消息可靠接收,确保消息在中间件可靠保存,只有接受方收到后才删除消息,多个消息也可以组成原子事务。
■消息中间件的主要应用场景:
在多个系统间进行整合和通讯的时候,通常会要求:
1、可靠传输,数据不能丢失,有的时候,也会要求不能重复传输;
2、异步传输,否则各个系统同步发送接收数据,互相等待,造成系统瓶颈
三、基本的Queue消息发送-1
配置Maven所需的依赖,示例如下:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.16</version>
</dependency>
Queue消息发送的示例代码如下:
public class QueueSender {
public static void main(String[] args) throws Exception {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.8.88:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("myactive-queue");
        MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 4; i++) {
            TextMessage message = session.createTextMessage("message==" + i);
            Thread.sleep(1000);
// 通过消息生产者发送消息
producer.send(message);
        }
        session.commit();
        session.close();
        connection.close();
    }
}
public class QueueReceiver {
public static void main(String[] args) throws Exception {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.8.88:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("myactive-queue");
        MessageConsumer consumer = session.createConsumer(destination);
int i = 0;
while(i < 3) {
            i++;
            TextMessage message = (TextMessage)consumer.receive();
            session.commit();
            System.out.println("收到消息:" + message.getText());
        }
        session.close();
        connection.close();
    }
}
四、JMS基本概念-1
■JMS是什么
JMS Java Message Service,Java消息服务,是Java EE中的一个技术。
■JMS规范
    JMS定义了Java中访问消息中间件的接口,并没有给予实现,实现■JMS接口的消息中间件称为JMS Provider, 例如ActiveMQ

■JMS Provider:实现JMS接口和规范的消息中间件

■JMS Message:JMS的消息,JMS消息由以下三部分组成:
1、消息头:每个消息头字段都有相应的getter和setter方法
2、消息属性:如果需要除消息头字段以外的值,那么可以使用消息属性。
3、消息体:封装具体的消息数据

■JMS Producer:消息生产者,创建和发送JMS消息的客户端应用
■JMS Consumer:消息消费者,接收和处理JMS消息的客户端应用
消息的消费可以采用以下两种方法之一:
1、同步消费:通过调用消费者的receive方法从目的地中显示提取消息,receive方法可以一直阻塞直到消息到达。
2、异步消费:客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。
五、JMS基本概念-2
■JMS domains:消息传递域,JMS规范中定义了两种消息传递域:点对点(point-to-point,简写成PTP)消息传递域和发布/订阅消息传递域(publish/subscribe,简写成pub/sub)

■1:点对点消息传递的特点如下:
1)每个消息只能有一个消费者
2)消费的生产和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
■2、发布/订阅消息传递域的特点如下:
1)每个消息可以有多个消费者
2)生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS规范允许客户创建持久订阅,这在一定程序上放松了时间上的相关性要求。持久订阅允许消费者消费它在未处于激活状态时发送的消息。
■3、在点对点消息传递域中,目的地被称为队列(queue);在发布/订阅消息传递域中,目的地被称为主题(topic)

猜你喜欢

转载自wzalong.iteye.com/blog/2327686