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

    一、背景

    中间件

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

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

    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.5in,如下图所示:

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

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

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

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

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

    10、角色信息的定义放在D:apache-activemq-5.15.5conf下的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>
    View Code

    修改为:

    <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>
    View Code

    2、指定Java路径问题

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

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

    wrapper.java.command=java

    改为这样就行了

    E:Program FilesJavajdk1.8.0_92injava     

    五、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 Redelivery Policy(消息重发策略)

    ActiveMQ的断线重连机制

    ActiveMQ失效转移(Failover)

  • 相关阅读:
    MySQL数据库高并发优化配置
    MySQL性能参数详解
    jQuery中过滤选择器first和first-child的区别
    Linux非常用命令
    jps命令学习
    通过乐观锁(版本号)降低并发时的锁竞争
    ReentrantLock 相关学习笔记
    grep 所有多个关键字
    ThreadLocal学习笔记
    Idea设置全白色 背景
  • 原文地址:https://www.cnblogs.com/peterYong/p/10872066.html
Copyright © 2011-2022 走看看