分享

activeMQ(1):activeMQ简介与安装使用

最近学习了一下消息中间件activeMQ,为了增加印象,特此梳理处理自己学习内容,分享出来。。。。本片内容我们主要来介绍activeMQ是什么,能干什么、特点;消息中间件的特点、功能、应用场景等。
activeMQ是什么?
ActiveMQ是apache推出的一款开源的,完全支持JMS1.1,和J2EE1.4规范的JMS(即Java Message Service,Java消息服务应用程序接口,
是一个Java平台中关于面向消息中间件(MOM)的API)Provider实现的消息中间件(Message Oriented Middleware,MOM)
activeMQ能干什么?
最主要的功能就是:实现JMS Provider接口,用来帮助实现高可用、高性能、可伸缩性、易用和安全的企业级面向消息服务的系统。
A------》MQ-------》B,解耦作用,让a b之间的调用,实现了异步调用。a不需要等待b的响应。A和B通过中间件来进行消息传递。
activeMQ特点
基于java 语言开发
完全支持JMS1.1,和J2EE1.4规范(持久化、XA消息、事务)
支持多种传送协议:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA
可插拔的体系结构,可灵活定制,如消息存储方式、安全管理等。
很容易和application server集成使用
多种语言和协议编写客户端。如java、c、c++、c#、python、ruby、perl、PHP
从设计上保证了高性能的集群、客户端-服务器、点对点
可以很容易的和spring结合使用
支持通过JDBC和journal提供高速的消息持久化
支持与Axis整合
消息中间件(Message Oriented Middleware,MOM)
MOM基本功能:将信息以消息的形式,从一个应用程序传动到一个或者多个应用程序。
MOM主要特点
消息异步接收,类似手机短息的行为,消息发送者不需要等待消息接收者的响应,减少软件多系统集成的耦合度。
消息可靠接收,确保消息在中间件可靠保存,只有接收方收到后才删除消息,多个消息也可以组成原子事务。
消息中间件的主要应用场景:
在多个系统间进行整合和通讯的时候,通常会要求:
1、 可靠传输,数据不能丢失;有的时候,也会要求不能重复传输。
2、 异步传输,否则各个系统同步发送接收数据,互相等待,造成系统瓶颈。
目前比较知名的消息中间件
IBM MQSeries
BEA WebLogicJMS Server
OracleAQ
Tibco
SwiftMQ

ActiveMQ是免费的java实现的消息中间件
activemq安装和基本使用安装
下载并安装activeMQ服务器端
从官网下载activeMQ相应的版本,本次学习使用的是5.9.0
拷贝到安装的目录下,直接解压。
启动运行
普通启动: ./activemqstart
启动并指定日志文件:./activemq start > /tmp/activeMQLog
检查是否启动成功
activeMQ默认使用61616端口提供JMS服务,使用8161端口个提供管理控制台服务,执行以下命令检验是否成功启动activeMQ服务:
查看61616端口是否打开:netstat –an |grep61616
查看控制台或者日志文件是否报错。
访问activeMQ管理页面:http://172.20.10.8:8161/admin/
默认的用户名密码是admin/admin
activemq.jpg
关闭

activeMQ:./activeMQstop 或者直接kill -9 pid

生产和消费代码测试(基于队列实现消息的生产和消费)
配置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>
  
生产者代码实例
  
    public static void  main(String[] args) throws  JMSException, InterruptedException {
  
        // TODO  Auto-generated method stub
  
        ConnectionFactory connectionFactory = new  ActiveMQConnectionFactory("tcp://172.20.10.8:61616");
  
        Connection conn = connectionFactory.createConnection();
  
        conn.start();
  
        Session session = conn.createSession(true,  Session.AUTO_ACKNOWLEDGE);
  
        Destination destination = session.createQueue("queue");
  
        MessageProducer producer = session.createProducer(destination);
  
        for(int i=0;i<3;i++){
  
            TextMessage textMessage = session.createTextMessage("message"+i);
  
            Thread.sleep(1000);
  
            producer.send(textMessage);
  
        }
  
        session.commit();
  
        session.close();
  
        conn.close();
  
    }
  
1587025100.jpg
                              
Messages Enqueued进入队列的消息
Messages Dequeued 出了队列的消息
消费者代码实例
  
    public static void  main(String[] args) throws  JMSException {
  
        // TODO  Auto-generated method stub
  
        ConnectionFactory connectionFactory = new  ActiveMQConnectionFactory("tcp://172.20.10.8:61616");
  
        Connection connection = connectionFactory.createConnection();
  
        connection.start();
  
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
  
        Destination destination = session.createQueue("queue");
  
        MessageConsumer consumer = session.createConsumer(destination);
  
        for(int i=0;i<3;i++){
  
            TextMessage textMessage =  (TextMessage) consumer.receive();
  
            System.out.println("接收到的消息:"+textMessage.getText());
  
        }
  
        session.commit();
  
        connection.close();
  
    }
  
1587025167(1).jpg

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条