其实算不上初识了,工作一年来一直都有接触 mq 相关的东西。但是,从来都是粘贴复制别人的配置代码,却从未认真系统的学习过它,现在线上用 mq 的项目出问题了,老板在后面拿枪指着呢,不得不好好研究下了。

安装

说干就干,先到官网下载 ActiveMQ 安装到本地。如果用 Mac 的化就方便了,直接在终端:brew install activemq,然后根据安装后的提示直接输入:activemq start 启动它,执行启动命令后输出了四行日志,然后就完了!记得之前见过有个网站可以查看 ActiveMQ 的 Queue,Topic,以及一些消息堆积数等数据的,可是启动日志并没有告诉我怎么打开这样的网站。没办法,去官网看文档吧!

现在来到了官网,大眼一瞅,发现右下方的菜单栏里面有个 Using ActiveMQ 5。无须多言,这应该就是我们要找的文档了,先看了再说。

打开这个文档页面,看到了程序员们非常熟悉的 Examples,Getting Started,Hello World 字样。那么就先从 Getting Started 来看吧!

Getting Started

首先是,文档的自我说明:本文档介绍了怎么在 Unix 和 Windows 平台上安装和配置 ActiveMQ。

然后是,安装条件:大概就是需要几十或几百兆的硬盘空间啊,需要先安装 Java,Maven 啊,基本是 Java 菜鸟都能看懂的东西了。

紧接着就是怎么在不同的平台上安装和启动了,刚才在 Mac 上直接用 brew 安装和启动了,这也不废话了!

启动完了,然后又提示我们检测下是否启动成功了,直接检测 ActiveMQ 监听的 61616 端口有没有被监听即可:netstat -an | grep 61616

然后说监控 ActiveMQ 的状态,在这里终于找到了我们需要的查看 ActiveMQ 各项数据的地址:http://localhost:8161/admin,在浏览器中打开 此地址

就像学开车一样,不能只学打开火让车飞快地跑起来,还应该学会如何安全的让车停下来。找到 ActiveMQ 的安装目录,进入 bin 文件夹后执行:activemq stop。由此可以,刚才使用 brew 安装时,brew 必是把 bin 目录下的 activemq 这个脚本做成了全局可执行命令,所以使用 activemq start 可以直接启动呢!不用多说,现在我直接在当前目录也可以让车停下来:activemq stop,试了一下,确实停下来了!

然后是怎么使用不同的配置,这里我发现说的有两种情况:ActiveMQ 5.8 or older 和 activeMQ 5.9,然后我就查看了下我安装的版本,activemq: stable 5.14.4,尼玛,差距有点大啊!难道文档版本落后那么多?哎,先不管了,等下不行的话再重新安装最新版吧!这里介绍了这两种情况怎么使用其他配置而不是默认配置文件来启动 ActiveMQ,然后我还看到了 Spring SupportConfiguration section。我的项目就是用的 spring,以前配置都是抄别人的,现在终于可以看看官方指南了,先把这两个链接收藏起来等下都看了。从这里我也明白了,使用 activemq console 启动的话,就可以一直在当前终端里看启动和运行日志了。好了,现在我特别想去看看

Hello World 了。

Hello World

开头说运行完这个例子后,可以做什么什么。。。尼玛,一共五道作业题,我就能看明白最后一道:使用 Topic 代替 Queue,之前我还是稍微明白一点主题和队列的概念的。不管作业了,先去看看现成的例子吧!

自己在 IDEA 里面抄袭了下例子,发现有些 ActiveMQConnectionFactory 类,不是 Java 原生类,刚才最顶端看到了 Initial Configuration guide 来设置 classpath,想必就是教我们怎么把 ActiveMQ 相关的 jar 包导入项目吧!去这个页面看了一下,说有个叫 activemq-all.jar 的全功能包,但是没给下载连接,没办法谷歌一下喽,然后找到了伟大的 Maven 官方仓库,然后找到了跟我安装版本一直的 jar 包,然后下载它,并加入到项目 path 中去。

好了,现在可以愉快地抄例子代码了。

例子抄完了,运行了两边,一知半解的,消息好像是被保存在了项目根目录的 KahaDB 的文件夹下去了,并没有 保存到 ActiveMQ 服务器中,反正我在 localhost:8161 上没看到相关的 Queue。不过例子大概给了一个套路。

发送时:

  1. 创建连接工厂
  2. 使用连接工厂创建连接(奇怪,不是应该从连接工厂中获取连接的吗?)
  3. 启动连接
  4. 使用连接创建会话
  5. 使用会话创建地址(队列或主题地址。队列或主题为啥要依据会话创建呢?这两者之间有关系吗?不明白,不明白)
  6. 使用会话和地址创建消息生产者
  7. 设置消息生产者的分发消息的模式
  8. 使用会话创建一个文本消息(奇怪,消息这种独立的实体,为啥要依据会话创建呢?不明白,不明白)
  9. 使用生产者发送消息
  10. 关闭会话
  11. 关闭连接

消费时:

  1. 创建连接工厂
  2. 使用连接工厂创建连接(奇怪,不是应该从连接工厂中获取连接的吗?)
  3. 启动连接
  4. 使用连接创建会话
  5. 使用会话创建地址(队列或主题地址。队列或主题为啥要依据会话创建呢?这两者之间有关系吗?不明白,不明白)
  6. 使用会话和地址创建消息消费者
  7. 消费者接收消息(可以设置一定的超时时间)
  8. 关闭消费者(为啥消费者还需要关闭??生产者咋不需要关闭呢?)
  9. 关闭会话
  10. 关闭连接

看了那么久,稍微有点了解吧!今天先这样吧,回家吃饭了!

初识 ActiveMQ的更多相关文章

  1. [ActiveMQ]初识ActiveMQ

    初识ActiveMQ ActiveMQ介绍 官方网站:http://activemq.apache.org/ 最新版本:ActiveMQ 5.14.1(2016-10-28) 最新版本下载链接:htt ...

  2. ActiveMQ (一) 初识ActiveMQ

    了解JMS JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进 ...

  3. 初识ActiveMQ

    消息中间件的初步认识 什么是消息中间件? 消息中间件是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程 ...

  4. ActiveMQ(1)---初识ActiveMQ

    消息中间件的初步认识 什么是消息中间件? 消息中间件是值利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式架构下扩展进 ...

  5. ActiveMQ学习笔记(1)----初识ActiveMQ

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

  6. SpringBoot第二十篇:初识ActiveMQ

    本文是作者之前写的关于 ActiveMQ 的一篇文章.此处为了保证该系列文章的完整性,故此处重新引入. 一.消息中间件的介绍 介绍 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数 ...

  7. ActiveMQ 学习第二弹

    经历了昨天的初识 ActiveMQ,正好今天下班有点事耽搁了还没法回家,那就再学习会 ActiveMQ 吧!现在官网的文档没啥好看的了,毕竟是入门学习,太深奥的东西也理解不了.然后看官网上有推荐书籍& ...

  8. ActiveMQ消息的消费原理

    消费端消费消息: 在 初识ActiveMQ 中我提到过,两种方法可以接收消息,一种是使用同步阻塞的ActiveMQMessageConsumer#receive方法.另一种是使用消息监听器Messag ...

  9. ActiveMQ(2) ActiveMQ创建HelloWorld

    启动ActiveMQ: 请参见:ActiveMQ(1) 初识ActiveMQ 创建Maven工程: pom文件: <project xmlns="http://maven.apache ...

随机推荐

  1. servlet研究学习总结--OutputStream和PrintWriter的区别

    当用户和浏览器其进行交互时,会给服务器发送http请求,Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.requ ...

  2. [进程管理]Linux进程状态解析之R、S、D

    Linux是一个分时操作系统,能够在一个cpu上运行多个程序,每个被运行的程序实例对应一个或多个进程,这里介绍一下Linux进程状态. Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个 ...

  3. macOS 中使用 phpize 动态添加 PHP 扩展的错误解决方法

    使用 phpize 动态添加 PHP 扩展是开发中经常需要做的事情,但是在 macOS 中,首次使用该功能必然会碰到一些错误,本文列出了这些错误的解决方法. 问题一: 执行 phpize 报错如下: ...

  4. C# 创建压缩文件

    在程序中对文件进行压缩解压缩是很重要的功能,不仅能减小文件的体积,还能对文件起到保护作用.如果是生成用户可以下载的文件,还可以极大的减少网络流量并提升下载速度.最近在一个 C# 项目中用到了创建压缩文 ...

  5. javascript的面向对象详解

    每次说到javascript到面向对象,总感觉自己心里懂,但是却不知道该怎么说,这就是似懂非懂到表现,于是乎,每次一说,就要到处去查找资料,零零碎碎到看了一些,感觉有懂了,但是过段时间,好像又不知道是 ...

  6. IOS对话框UIAlertView

    //修改弹出对话框的样式 alertView.alertViewStyle = UIAlertViewStylePlainTextInput; //根据索引获取指定的某个文本框 [alertView ...

  7. OC点语法介绍和使用以及@property关键字

    使用"点语法" Person *p =[Person new]; //点语法 //对象.属性名 //注意,此时 (p.age)并不是直接方法实例对象 //而是xcode可能到点语法 ...

  8. mysql语句insert后取到返回的主键id

    Q:   有时候做类似接口里的数据订正,需要取到insert语句返回的id主键,在程序里通过对象返回好取,但是写sql怎么取到呢? A:  用select @@identity得到上一次插入记录时自动 ...

  9. hadoop集群中删除原有jdk设置

    普通用户: sudo rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64 tzdata-java-2012j-1.e ...

  10. Linux中Nginx反向代理下的tomcat集群

    Nginx具有反向代理(注意和正向代码的区别)和负载均衡等特点. 这次Nginx安装在 192.168.1.108 这台linux 机器上.安装Nginx 先要装openssl库,gcc,PCRE,z ...