一、背景

中间件

由于业务的不同、技术的发展、硬件和软件的选择有所差别,导致了异构组件或应用并存的局面。要使这些异构的组件协同工作,一个有效的方式就是提供一个允许它们进行通信的层,该层即为中间件

在概念上,中间件位于应用程序层与平台层(操作系统和底层网络服务)之间。

MOM

全称:Message-Oriented Middleware 中文:面向消息的中间件。

MOM通信模型:

MOM模型中的四个基本元素:消息传递提供者目的地客户端(发送方或接收方)、消息
发送方客户端将消息发送到消息提供者维护的目的地,这些消息一直被保留直到接收方客户端将消息取出。

JMS

全称:Java Message Service 中文:Java消息服务。

JMS是Java的一套API标准,最初的目的是为了使应用程序能够访问现有的MOM系统(客户端通过JMS访问消息提供者);后来被许多现有的MOM供应商采用,并实现为MOM系统。
基于JMS实现的MOM,又被称为JMS Provider。

ActiveMQ

Apache出品,完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。

它有很多功能、特色,所以它的详细信息很复杂。但是基于这一刻,我们只需要知道两件事:(1) 它是MOM;(2) 它是JMS的一个实现。

ActiveMQ使用java写的,所以天然跨平台,windows,各种类Unix系统都可运行,只需要下载对应的分发包即可。

二、ActiveMQ安装启动

1、打开浏览器,访问官网

2、下载最新的版本,当前最新版本,根据ActiveMQ需要安装的操作系统选择性下载对应的版本,这里我选择Windows版本,然后点击下载ZIP包

3、下载完成以后,将zip文件解压到D盘下,解压后的目录结构如下图所示:

4、在启动ActiveMQ前,首先要确保服务器上已经安装和配置好JDK,并且JDK的版本要满足ActiveMQ的要求

cmd  java -version

5、接下来我们进入到D:\apache-activemq-5.15.5\bin,如下图所示:

6、根据服务器上操作系统的版本,选择进入到win32还是win64,这里选择进入win64目录,然后双击activemq.bat,这时activemq就启动起来了,成功启动以后打印的日志如下图所示:

也可以安装为服务启动,执行bin>win64目录下面的InstallService.bat就可以了。

7、打开浏览器,输入http://localhost:8161/admin/,弹出一个windows安全提示框,提示输入activemq的用户名和密码,如下图所示:

8、接下来我们打开D:\apache-activemq-5.15.5\conf这个目录,找到jetty-realm.properties文件(该文件保存着用户名和密码信息)

找到文件的末尾,格式是 用户名: 密码,用户角色 ,如下图所示:

10、角色信息的定义放在D:\apache-activemq-5.15.5\conf下的jetty.xml文件中,如下图所示:

11、 我们知道了角色定义的位置,角色对应的用户名和密码后,我们就可以使用默认的用户名admin和默认的密码admin来登录系统,如下图所示:

12、 登录成功以后,就可以看到activemq的主页了,如下图所示:

三、后台管理页面

Queues是队列方式消息。Topics是主题方式消息。Subscribers是消息订阅监控查询。Connections可以查看链接数,分别可以查看xmpp、ssl、stomp、openwire、ws和网络链接。Network是网络链接数监控。Send可以发送消息数据。

Numbers of Pending Messages: 待处理的消息数量

Messages Enqueued:在排队的消息

Messages Denqueued:已出队列的消息

Send中可以手动发数据到队列

注:队列名称是区分大小写的。

四、启动报错

1、cmd中启动时看到错误:Failed to start Apache ActiveMQ......

修改conf->activemq.xml 配置文件

<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

修改为:

<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://127.0.0.1:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://127.0.0.1:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://127.0.0.1:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://127.0.0.1:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://127.0.0.1:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

2、指定Java路径问题

运行bat文件是报了个版本的错误,因为自己机器的java_home是指向1.6的,所以只能在配置文件里面另外指定java_home,但是找了好久也试了好久,和平常的set java_home=... 好像不管用。

最后自己找到了bin\win64路径下的wrapper.conf文件,里面有个

wrapper.java.command=java

改为这样就行了

E:\Program Files\Java\jdk1.8.0_92\bin\java

五、JMS客户端编程模型

客户端编程模型,是讲如何使用JMS API实现 应用程序和JMS Provider的通信。

消息传送模式又称为消息传送域,JMS API定义了两种模式:PTP和Pub/Sub。

PTP

全称:Point-to-Point 中文:点对点
上图描述了这样的内容:Sender发送Message代理维护的Queue,然后Receiver可以从这个Queue中获取这个Message
这个模式的特点是:
  1. 一个Message只能交给一个Receiver;这里的Message像是一个消耗品。
  2. 只要Queue中有Message,Receiver就能获取到。

Pub/Sub

全称:Publish/Subscribe 中文:发布/订阅

上图描述了这样的内容:Publisher发布Message代理维护的TopicSubscriber代理那里订阅的Topic,从而可以获取对应的Message
这个模式的特点是:
  1. 一个Message可以复制多份,交给多个Subscriber。
  2. 先订阅,再获取 - Subscriber只能获取订阅之后发送到Topic的Message。

编程模型

说明:连接工厂、目的地通常作为受管理对象来创建、配置、管理,驻留在对象存储库中;客户端程序通过JNDI查找获取对象,而不建议显示的创建。所以连接工厂、目的地在上图的表示有所不同。

对象简介

  • 连接工厂(ConnectionFactory)
    客户端使用连接工厂对象(ConnectionFactory)创建连接。
  • 连接(Connection)
    连接对象 (Connection) 表示客户端与代理之间的活动连接。创建连接时会分配通信资源并对客户端进行验证。这是一个相当重要的对象,大多数客户端均使用一个连接来完成所有的消息传送。连接支持并发使用:一个连接可由任意数量的生成方和使用方共享。
  • 会话(Session)
    如果连接代表客户端与代理之间的通信渠道,则会话标记客户端与代理之间的单次对话。会话对象主要用于创建消息、消息生成方和消息使用方。
  • 消息(Message)
    消息封装一次通信的内容。消息由三部分组成:消息头、属性和主体。
  • 消息生成方(MessageProducer)
    由Session创建,负责发送Message到目的地。
  • 消息使用方(MessageConsumer)
    由Session创建,负责从目的地中消费Message。
  • 目的地(Destination)
    JMS Provider负责维护,用于对Message进行管理的对象。MessageProducer需要指定Destination才能发送消息,MessageReceiver需要指定Destination才能接收消息。

参考:

AMQ学习笔记 - 00. 汇总

JMS:(一款开源的JMS具体实现——ActiveMQ。ActiveMQ是一个易于使用的消息中间件。)

深入浅出JMS(一)--JMS基本概念

JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步

深入浅出JMS(二)--ActiveMQ简单介绍以及安装

深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

点对点的同步消息模型

深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

ActiveMQ介绍的更多相关文章

  1. 淘淘商城项目_同步索引库问题分析 + ActiveMQ介绍/安装/使用 + ActiveMQ整合spring + 使用ActiveMQ实现添加商品后同步索引库_匠心笔记

    文章目录 1.同步索引库问题分析 2.ActiveM的介绍 2.1.什么是ActiveMQ 2.2.ActiveMQ的消息形式 3.ActiveMQ的安装 3.1.安装环境 3.2.安装步骤 4.Ac ...

  2. ActiveMQ介绍及安装

    1.   ActiveMQ 1.1. 什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范 ...

  3. ActiveMQ介绍和ActiveMQ入门实例

    ActiveMQ百度百科   ActiveMQ入门实例-cnblogs.com      作者用的是5.5的版本,我测试时用的是5.6,按照作者说的整了一下,走得通

  4. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  5. [ActiveMQ]初识ActiveMQ

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

  6. 使用activeMQ实现jms

    一:jms介绍         jms说白了就是java message service,是J2EE规范的一部分,跟jdbc差不多,sun只提供了接口,由各个厂商(provider)来进行具体的实现, ...

  7. activeMq 使用方法

    一:activeMq介绍 ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信,下载地址是:http://a ...

  8. ActiveMQ详解

    Apache ActiveMQ介绍 使用MQ的场景 ActiveMQ的安装 收发消息的简单实现 ActiveMQ内部实现 queue和topic 消息持久化 kahadb原理 最关键的6个配置 Apa ...

  9. 消息队列中间件(二)使用 ActiveMQ

    ActiveMQ 介绍 Active MQ 是由 Apache 出品的一款流行的功能强大的开源消息中间件,它速度快,支持跨语言的客户端,具有易于使用的企业集成模式和许多的高级功能,同时完全支持 JSM ...

随机推荐

  1. Android试题

    1. Binder:例子: https://blog.csdn.net/qq_33208587/article/details/82767720

  2. Redis 使用指南:深度解析 info 命令

    Redis 是一个使用  ANSI C 编写的开源.基于内存.可选持久性的键值对存储数据库,被广泛应用于大型电商网站.视频网站和游戏应用等场景,能够有效减少数据库磁盘 IO, 提高数据查询效率,减轻管 ...

  3. layui upload 在JS动态加载内容后, 点击按钮无反应

    /** * 根据用户选择的不同规格选项 * 返回 不同的输入框选项 */ function ajaxGetSpecInput2(spec_arr) { var goods_id = $('#goods ...

  4. 【IntelliJ IDEA】添加一个新的tomcat,tomcat启动无法访问欢迎页面,空白页,404

    ===================================第一部分,添加一个tomcat================================================== ...

  5. Java集合--Hash、Hash冲突

    一.Hash 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这 ...

  6. xcode 把项目代码提交到远程SVN服务器

    环境 xcode 7  Mac air xcode默认支持GIT源码管理工具,但现在想把代码提交到已有到SVN服务器上,步骤如下: 1,在safari中打开svn链接地址,信任证书,输入用户名密码 , ...

  7. jquery.serializejson.min.js的妙用

    关于这个jquery.serializejson.min.js插件来看,他是转json的一个非常简单好用的插件. 前端在处理含有大量数据提交的表单时,除了使用Form直接提交刷新页面之外,经常碰到的需 ...

  8. Flutter 35: 图解自定义 View 之 Canvas (二)

    小菜前几天整理了以下 Canvas 的部分方法,今天小菜继续学习 Canvas 第二部分. drawXXX drawShadow 绘制阴影 drawShadow 用于绘制阴影,第一个参数时绘制一个图形 ...

  9. Linux软链接创建及删除

    1.创建软链接 具体用法是:ln  -s   [源文件]   [软链接文件]. [root@localhost folder]# pwd /tmp/folder [root@localhost fol ...

  10. 智能指针原理及实现(1)shared_ptr

    0.异常安全 C++没有内存回收机制,每次程序员new出来的对象需要手动delete,流程复杂时可能会漏掉delete,导致内存泄漏.于是C++引入智能指针,可用于动态资源管理,资源即对象的管理策略. ...