zoukankan      html  css  js  c++  java
  • ActiveMQ简介

    ActiveMQ是什么

      ActiveMQ是Apache推出的一款开源的,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现的消息中间件(Message Oriented Middleware,MOM)

    ActiveMQ能干什么

      最主要的功能是:实现JMS Provider,用来帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息服务的系统

    ActiveMQ的特点

      完全支持JMS1.1和J2EE 1.4规范(持久化、XA消息、事务)
      支持多种传送协议: in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA
      可插拔的体系结构,可以灵活定制,如:消息存储方式、安全管理等
      很容易和Application Server集成使用
      多种语言和协议编写客户端。如:Java、C、C++、PHP
      可以很容易的和Spring结合使用

    消息中间件
      MOM基本功能: 将信息以消息的形式,从一个应用程序传送到另一个或者多个应用程序
      MOM的主要特点:
        1.消息异步接受,类似于手机短信的行为,消息发送者不需要等待消息接受者的响应,减少软件多系统集成的耦合度
        2.消息可靠接收,确保消息在中间件可靠保存,只有接收方收到后才删除消息,多个消息也可以组成原子事务
        3.消息中间件的主要应用场景:
          在多个系统间进行整合和通讯的时候,通常会要求:
            a.可靠传输,数据不能丢失,有的时候,也会要求不能重复传输。
            b.异步传输,否则各个系统同步发送接受数据,互相等待,造成系统瓶颈。

    ActiveMQ安装和基本使用
    1.下载并安装ActiveMQ服务器端,从http://activemq.apache.org/download.html下载最新的ActiveMQ,解压后就可以直接使用
    2.运行启动
      a.普通启动,到ActiveMQ/bin目录下面,执行 ./activemq start
      b.启动并指定日志文件: ./activemq start > /tmp/activemq.log
    3.检查是否已经启动
      ActiveMQ默认采用61616端口提供JMS服务,使用8161端口提供管理控制台服务,执行以下命令以便检查是否已经成功启动ActiveMQ服务:
        a. 比如查看61616端口是否打开: netstat -an | grep 61616
        b. 直接访问ActiveMQ的管理页面: http://192.168.1.102:8161/admin/      默认的用户名和密码是 admin/admin
    4.关闭ActiveMQ, 可以用 ./activemq stop , 或者直接kill 线程

    如果能启动ActiveMQ后,访问 http:// ip :8161/admin/ ,能够出现下面的界面 说明ActiveMQ就启动成功了。

    第一个ActiveMQ程序

    1.新建一个Maven项目,在pom.xml里面添加ActiveMQ的lib依赖

     1       <dependency>
     2           <groupId>org.apache.activemq</groupId>
     3           <artifactId>activemq-all</artifactId>
     4           <version>5.9.0</version>
     5       </dependency>
     6   
     7     <dependency>
     8         <groupId>org.apache.xbean</groupId>
     9         <artifactId>xbean-spring</artifactId>
    10         <version>3.16</version>
    11     </dependency>

    消息发送者:

     1 import javax.jms.Connection;
     2 import javax.jms.ConnectionFactory;
     3 import javax.jms.Destination;
     4 import javax.jms.MessageProducer;
     5 import javax.jms.Session;
     6 import javax.jms.TextMessage;
     7 
     8 import org.apache.activemq.ActiveMQConnectionFactory;
     9 
    10 public class JmsSend {
    11     public static void main(String[] args) throws Exception {
    12         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.1.120:61616");
    13         Connection connection = connectionFactory.createConnection();
    14         connection.start();
    15         
    16         Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
    17         Destination destination = session.createQueue("my-queue");
    18         
    19         MessageProducer producer = session.createProducer(destination);
    20         for(int i = 0;i < 10;i++){
    21             TextMessage message = session.createTextMessage("message --->" + i);
    22             Thread.sleep(1000);
    23             //通过生产者发出消息
    24             producer.send(message);
    25         }
    26         session.commit();
    27         session.close();
    28         connection.close();
    29     }
    30 }

     运行上面的消息发送者程序后,再去访问:http:// ip :8161/admin/,会出现下面的界面:

    消息接受者:

     1 import javax.jms.Connection;
     2 import javax.jms.ConnectionFactory;
     3 import javax.jms.Destination;
     4 import javax.jms.MessageConsumer;
     5 import javax.jms.Session;
     6 import javax.jms.TextMessage;
     7 
     8 import org.apache.activemq.ActiveMQConnectionFactory;
     9 
    10 public class JmsReceiver {
    11     public static void main(String[] args) throws Exception {
    12         ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://120.76.123.81:61616");
    13         Connection connection =  cf.createConnection();
    14         connection.start();
    15         
    16         Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
    17         Destination destination = session.createQueue("my-queue");
    18         MessageConsumer consumer = session.createConsumer(destination);
    19         int i = 0;
    20         while(i < 10){
    21             i++;
    22             TextMessage message = (TextMessage)consumer.receive();
    23             session.commit();
    24             System.out.println("接收到的消息是:"+message.getText());
    25         }
    26         session.close();
    27         connection.close();
    28     }
    29 }

    运行程序结果:

    再去访问:http:// ip :8161/admin/,会出现下面的界面:

  • 相关阅读:
    vs.net 2005, 没有找到MSVCR80D.dll的完美解决方案
    C++内存布局从一个修改私有变量的问题想到的
    堆栈详解
    加载.x文件
    深入分析规则引擎
    高级着色语言HLSL入门(5)
    字符数组,字符指针,Sizeof总结
    C++ 隐式和显式 初始化,类型转换
    fread()和fwrite()函数分析
    结构体 对齐的问题
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6102985.html
Copyright © 2011-2022 走看看