zoukankan      html  css  js  c++  java
  • linux下activemq安装与配置

    什么是消息中间件(MQ)?

    1.1 为什么会需要消息队列(MQ)?

      主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

    2.2 什么是消息中间件

      消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)
      常见的消息中间件产品:
      (1)ActiveMQ
      ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。我们在本次课程中介绍 ActiveMQ的使用。
      (2)RabbitMQ
      AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。
      (3)ZeroMQ
      史上最快的消息队列系统
      (4)Kafka
      Apache下的一个子项目 。特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统。适合处理海量数据。

    ActiveMQ

    ActiveMQ是Apache的一个开源项目,它是一个能力强劲的开源消息总线,也是一个中间件产品。它是JMS的一个实现。

    首先了解一下JMS

    JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。

    JMS是Java Message Service的简称,用来发送异步消息,在不同系统和不同的模块之间我们可以利用它实现集成。
    JMS有两个好处:第一个就是让模块之间或者系统之间的耦合度降低,第二个是异步通信

    JMS本身只定义了一系列的接口规范,是一种与厂商无关的 API,用来访问消息收发系统。它类似于 JDBC(java Database Connectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ,这只是几个例子。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JML 客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。
    JMS 定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

    · TextMessage--一个字符串对象
    · MapMessage--一套名称-值对
    · ObjectMessage--一个序列化的 Java 对象
    · BytesMessage--一个字节的数据流
    · StreamMessage -- Java 原始值的数据流

    JMS的消息机制有2种模型

    一种是Point to Point,表现为队列的形式。发送的消息,只能被一个接收者取走;

    另一种是Topic,可以被多个订阅者订阅,类似于群发。

    在JMS中有这样几个重要的核心接口和类:

    ConnectionFactory:用于jms client获取与jms provider的连接。不同的jms产品,对这个接口有不同的实现,比如说ActiveMQ,这个接口的实现类是ActiveMQConnectionFactory
    Connection:是由ConnectionFactory产生的,表示jms client与jms provider的连接
    Session:是由Connection产生的,表示一个会话。Session是关键组件,Message、Producer/Consumer、Destination都是在Session上创建的
    Message:这个组件很好理解,就是传输的消息,里面包括head、properties、body,其中head是必选的
    Destination:是消息源,对发送者来说,就是消息发到哪里;对接收者来说,就是从哪里取消息。Destination有2个子接口,Queue和Topic,分别对应上面提到的2种模型
    MessageProducer:是消息发送者
    MessageConsumer:是消息接收者,和Message Producer是相反的一种组件

    JMS有所了解之后,我们来看ActiveMQ

    ActiveMQ特性

    • 遵循JMS规范:ActiveMQ的各种特性是JMS1.1规范的实现。它们包括同步和异步消息传递,一次和只有一次的消息传递,对于预订者的持久消息等等。依附于JMS规范意味着,不论JMS消息提供者是谁,同样的基本特性都是有效的。
    • 连接:ActiveMQ提供各种连接选择,包括HTTP,HTTPS,IP多点传送,SSL,STOMP,TCP,UDP,XMPP等。大量的连接协议支持使之具有更好的灵活性。
    • 支持多种语言客户端:ActiveMQ对多种语言提供客户端API,除了Java之外还有C/C++、.NET、Perl、PHP、Ruby、Python等。这使得ActiveMQ能用在Java之外的其它语言中。很多其它语言都可以通过ActiveMQ提供的客户端API使用ActiveMQ的全部特性。当然,ActiveMQ代理器(broker)仍然是运行在java虚拟机上,但是客户端能够使用其它的被支持的语言。
    • 可插拔的持久性和安全:ActiveMQ提供多种持久性方案可供选择,也可以完全按自己需求定制验证和授权。例如,ActiveMQ通过KahaDB提供自己的超快速消息持久方案(ultra-fast message persistence),但也支持标准的JDBC方案。ActiveMQ可以通过配置文件提供简单的验证和授权,也提供标准的JAAS登陆模块。
    • 简单的管理:ActiveMQ是为开发者设计的。它并不需要专门的管理工具,因为它提供各种易用且强大的管理特性。有很多方法去监控ActiveMQ的各个方面,可以通过JMX使用JConsole或ActiveMQ web console;可以运行ActiveMQ消息报告;可以用命令行脚本;可以通过日志。
    • 支持集群:为了利于扩展,多个ActiveMQ broker能够联合工作。这个方式就是network of brokers并且能支持多种拓扑结构。

    ActiveMQ的安装

    • AMQtar包上传至指定文件夹(如:/home/cspgs
    • 进入部署目录,解压文件(我这里的部署路径是/home/cspgs
    命令:tar -zxvf apache-activemq-5.12.1-bin.tar.gz

        并将解压后的目录名改为activemq

    命令:mv apache-activemq-5.12.1 activemq

    为了能够使用JMX监控远程的ActiveMQ,我们需要对ActiveMQ进行配置,以使JMX能够正确连接到远程的ActiveMQ监控服务。

    • 进入activemq目录,修改conf目录下的activemq.xml文件,修改2个地方
    命令:vi conf/activemq.xml

    (1)修改broker属性中的字段,添加 useJmx= "true"

     修改后:

    (2)在文件中将managementContext的内容修改为下面的内容

    <managementContext>
          <managementContext createConnector="true" connectorPort="11099" />
    </managementContext>

     默认:

    • 查看端口是否被占用

    Activemq有这几个端口,分别是: 

    conf目录的activemq.xml5个端口

    以及conf目录下jetty.xml1个端口

     

    查看端口是否被占用命令,xxx为端口:

    netstat -apn | grep xxx
    端口未被占用如下:

    端口被占用如下:

    LISTEN那一行,表示被占用。

    LISTENING并不表示端口被占用,不要和LISTEN混淆哦,查看具体端口时候,必须要看到tcp,端口号,LISTEN那一行,才表示端口被占用了

    • 进入ActiveMQ启动目录下
    命令:cd bin/linux-x86-64

    • 启动ActiveMQ,并查看进程,amq启动后会有2个进程
    命令:./activemq start
    查看进程:ps -ef | grep activemq

    • 检验ActiveMQ是否启动成功

    在浏览器输入url地址http://ip:8161/admin

    比如我的地址是http://192.168.80.72:8161/admin

    有的访问需要用户和密码:admin/admin

    出现这个页面表示已经启动成功

    • 如果activemq没有启动成功,查看日志文件,分析原因具体解决,日志文件位于logs目录下的activemq.log文件
    • IPv6配置更改不需要更改任何配置信息。

    • IPv6应用连接

      程序连接地址需要修改为IPv6地址

      flow.queue.url=tcp://[fd15:4ba5:5a2b:1008:20c:29ff:fe45:98c7]:61616

    • 验证IPv6过程

    IPv6地址访问ActiveMQ,访问成功。

    浏览器访问地址:http://[fd15:4ba5:5a2b:1008:20c:29ff:fe45:98c7]:8161/admin/

  • 相关阅读:
    leetcode 111二叉树的最小深度
    leetcode 104. 二叉树的最大深度
    React简介,开发环境搭建,项目结构目录
    词典中最长的单词
    React export和export default的区别
    哈希表-两个数组的交集
    BFS-地图分析&岛屿数量
    js 下拉框实现去重 & layui可输入可搜索的下拉框
    BFS(找最短距离,最短路径)二叉树最小深度&打开转盘锁&对称二叉树
    python操作es增删改查
  • 原文地址:https://www.cnblogs.com/xiaotang5051729/p/10371272.html
Copyright © 2011-2022 走看看