1. 什么是ActiveMQ?

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

2. ActiveMQ能干什么?

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

3. ActiveMQ的特点:

  多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

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

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

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

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

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

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

  支持Ajax

  支持与Axis的整合

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

4.ActiveMQ的安装

  ActiveMQ官网下载地址:http://activemq.apache.org/download.html

  

  这里下载的5.15.6windows版的zip包,下载后直接解压到需要的文件夹,如果想要方便开启ActiveMQ也可以自己配置环境变量,配置环境变量的方式这里就不再详述。

  解压之后的目录

    

  bin存放的是脚本文件

  conf存放的是基本配置文件

  data存放的是日志文件

  docs存放的是说明文档

  webapps-demo存放的是简单的实例

  lib存放的是activemq所需jar包

  webapps用于存放项目的目录

  activemq-all-5.15.6.jar是使用ActiveMQ时需要依赖的jar

  进入到安装目录的bin目录下(配置了环境变量可以直接在任意位置)打开cmd,输入命令:activemq start开启ActiveMQ, activemq stop 关闭。

  如果报:

Caused by: java.io.IOException: Failed to bind to server socket: tcp://0.0.0.0:61616?maximumConnections=1000&wireformat.maxFrameSize=104857600 due to: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind

  表示默认端口61616被占用。在大多数情况下,占用61616端口的是Internet Connection Sharing (ICS) 这个Windows服务,你只需停止它就可以启动ActiveMQ了。

  如果报:

Failed to bind to server socket: amqp://0.0.0.0:5672?maximumConnections=1000&wireformat.maxFrameSize=104857600 due to:
java.net.BindException: Address already in use: JVM_Bind

  是5672端口被占用,修改conf/activemq.xml中的conf/activemq.xml中的端口即可。

<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireformat.maxFrameSize=104857600"/>

  访问:http://localhost:8161/

  我们在浏览器打开链接之后输入账号密码

  默认账号:admin

  密码:admin

  如下则表示安装成功

  

5. 什么情况下使用ActiveMQ

  1. 多个项目之间集成 
    (1) 跨平台 
    (2) 多语言 
    (3) 多项目
  2. 降低系统间模块的耦合度,解耦 
    (1) 软件扩展性
  3. 系统前后端隔离 
    (1) 前后端隔离,屏蔽高安全区

6. 简单使用ActiveMQ

  新建一个maven项目,引入依赖(非maven项目直接将安装目录中的activemq-all.jar直接考到项目 的lib文件夹下)

  pom.xml文件如下

  <dependency><groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.15.6</version> </dependency>

  新建一个生产者类

  

package com.wangx.activemq;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*; public class MessageSender { public static void main(String[] args) throws JMSException { //创建链接工厂 ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,ActiveMQConnectionFactory.DEFAULT_BROKER_URL); Connection connection = null; Session session = null; try{ //创建链接 connection = factory.createConnection(); //启动链接  connection.start(); //获取会话 session = connection.createSession(Boolean.TRUE, session.AUTO_ACKNOWLEDGE); //创建队列 Destination queue = session.createQueue("myQueue"); //创建生产者对象 MessageProducer messageProducer = session.createProducer(queue); for (int i = 0; i < 9; i++) { //创建消息对象 TextMessage textMessage = session.createTextMessage("hello:" + i); //发送消息  messageProducer.send(textMessage); System.out.println(textMessage.getText()); } session.commit(); session.close(); connection.close(); }catch (Exception e) { }finally { } } }

  运行消费者,将消息发送到ActiveMQ中,现在并没有消费者消费,但是我们访问http://localhost:8161可以看到消息已经在队列中了

  

  生产的消息已经有9条消息了。

  创建消费者

  

package com.wangx.activemq;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*; public class MessageReceive { public static void main(String[] args) { //创建链接工厂 ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,ActiveMQConnectionFactory.DEFAULT_BROKER_URL); Connection connection = null; Session session = null; try{ //创建链接 connection = factory.createConnection(); //启动链接  connection.start(); //获取会话 session = connection.createSession(Boolean.TRUE, session.AUTO_ACKNOWLEDGE); //创建队列 Destination queue = session.createQueue("myQueue"); //创建消费者 MessageConsumer messageConsumer = session.createConsumer(queue); //监听消息 while(true){ TextMessage msg = (TextMessage) messageConsumer.receive(); if(msg!=null) { msg.acknowledge(); System.out.println(Thread.currentThread().getName()+": Consumer:我是消费者,我正在消费Msg"+msg.getText()+"--->"); }else { break; } } session.commit(); session.close(); connection.close(); }catch (Exception e) { } } }

  控制台输出:

main: Consumer:我是消费者,我正在消费Msghello:0--->
main: Consumer:我是消费者,我正在消费Msghello:1--->
main: Consumer:我是消费者,我正在消费Msghello:2--->
main: Consumer:我是消费者,我正在消费Msghello:3--->
main: Consumer:我是消费者,我正在消费Msghello:4--->
main: Consumer:我是消费者,我正在消费Msghello:5---> main: Consumer:我是消费者,我正在消费Msghello:6---> main: Consumer:我是消费者,我正在消费Msghello:7---> main: Consumer:我是消费者,我正在消费Msghello:8---> main: Consumer:我是消费者,我正在消费Msghello:0---> main: Consumer:我是消费者,我正在消费Msghello:1---> main: Consumer:我是消费者,我正在消费Msghello:2---> main: Consumer:我是消费者,我正在消费Msghello:3---> main: Consumer:我是消费者,我正在消费Msghello:4---> main: Consumer:我是消费者,我正在消费Msghello:5---> main: Consumer:我是消费者,我正在消费Msghello:6---> main: Consumer:我是消费者,我正在消费Msghello:7---> main: Consumer:我是消费者,我正在消费Msghello:8--->

  可以看到,当消费者消费完队列中的消息后,将会一直等在receive()上监听消息的产生,直到队列中有新的消息被生产,会再次返回消息。

原文 ActiveMQ学习笔记(1)----初识ActiveMQ

转载于:https://www.cnblogs.com/xiaoshen666/p/10844370.html

ActiveMQ学习笔记(1)----初识ActiveMQ相关推荐

  1. ActiveMQ学习笔记(8)——导入ActiveMQ源码到Eclipse

    2019独角兽企业重金招聘Python工程师标准>>> 一.准备 Eclipse Luna 版本,本身已经支持Git和Maven. 安装了apache-maven,我使用的是3.1. ...

  2. ActiveMQ学习笔记07 - 优缺点

    2019独角兽企业重金招聘Python工程师标准>>> 优点: 可以用JDBC 虽然使用JDBC会降低ActiveMQ的性能,但是数据库一直都是开发人员最熟悉的存储介质.将消息存到数 ...

  3. Hadoop学习笔记—4.初识MapReduce

    一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个 编程模型 ,用以进行大数据量的计算.对于大 数据量的计算,通常采用的处理手法就是并行计算.但对许多开 ...

  4. ASM学习笔记1 - 初识ClassVistor ——以ClassReader的应用为例

    ASM学习笔记1 - 初识ClassVistor --以ClassReader的应用为例 1 ASM简介 什么是ASM? Java操纵类字节码的工具.是一个jar包. 如何使用? ASM提供两类API ...

  5. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  6. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

  7. xilinx srio ip学习笔记之初识srio

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之初识srio 前言 IP 设置 总结 前言 因为工作原因,需要对rapidio 的协议进行了解, ...

  8. ActiveMQ学习笔记01Q

    一.前言说明 MQ(Message Queue 消息队列)消息中间件 MQ是一种规范理念,其中一个落地的产品ActiveMQ 1.1 消息:(微信.短信.语音...)以一种双方约定好的格式作为一种信息 ...

  9. ActiveMQ学习笔记03 - 消息持久化

    2019独角兽企业重金招聘Python工程师标准>>> ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,还有一种内存存储的方式,由于内存不属于持久化 ...

  10. ActiveMQ学习笔记(21)----ActiveMQ集成Tomcat

    1. 监控和管理Broker Web Console 方式:直接访问ActiveMQ的管理页面:http://localhost:8161/admin,默认的用户名和密码是admin/admin.具体 ...

最新文章

  1. Key-Value数据库:Redis与Memcached之间如何选择?
  2. Javascript 常用技巧55例
  3. mybatis中 Executor的设计与实现
  4. 用navicate 连接本地数据库提示用户名/口令无效
  5. Vue-admin工作整理(四):路由组件传参
  6. Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null
  7. oschina mysql limit_MySQL 用 limit 为什么会影响性能?
  8. 【EMNLP2020】最后论文征稿通知和常见问题解答
  9. Python数学建模系列(九):回归
  10. 硬盘安装manjaro linux,安装Manjaro Linux的详细步骤
  11. 攻防世界crypto部分sherlock的writeup,原来不是培根密码。
  12. excel下拉公式保持一些参数不变
  13. 西工大机考《 合同法》大作业网考
  14. 用JAVA SWING实现简单的折叠组件伸缩功能(不使用JLayeredPane)
  15. V社线下沙龙·深圳站——12.05(周六)
  16. 贵阳骑龙村:一根小香葱闯出大市场
  17. php防刷红包,PHP防止多次请求刷红包的方法
  18. 企业信息化常见缩略词汇总
  19. Android开发插件推荐一:Lombok
  20. 电脑微信linux安装程序,Ubuntu安装Linux网页版微信

热门文章

  1. 拓端tecdat|R语言中回归模型预测的不同类型置信区间应用比较分析
  2. 拓端tecdat|用Prophet在Python中进行时间序列预测
  3. 函数无法识别_Halcon OCR识别
  4. springboot指定属性返回_SpringBoot中属性赋值操作的实现
  5. matcaffe训练与测试
  6. python爬虫SSL: CERTIFICATE_VERIFY_FAILED解决方案
  7. vs中能编译通过,但是会有红色下划线提示未定义标示符问题
  8. mysql php sdk_PHP连接MySQL数据库
  9. c++ 协程_深入理解异步I/O+epoll+协程
  10. HTML日志查看器,在浏览器中查看Tomcat日志文件