activeMQ简介、安装

activeMQ是属于消息中间件的一种

什么是消息中间件?
消息中间件是值利用高效可靠的消息传递机制进行平台无 关的数据交流,并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队模型,可以在分布式架构下 扩展进程之间的通信。消息中间件主要解决的就是分布式系统之间消息传递的问 题,它能够屏蔽各种平台以及协议之间的特性,实现应用 程序之间的协同。

activeMQ是完全基于JMS规范开发的一款消息中间件,在了解activeMQ之前,需要先介绍JMS规范相关知识。

什么是JMS?
Java消息服务(Java Message Service)是java平台中关 于面向消息中间件的API,可以看作一种用于java程序与消息中间件之间的消息通信协议,用于在两个应用程序之间,或者 分布式系统中发送消息,进行异步通信。 JMS 是一个与具体平台无关的 API,这个因为绝大多数 MOM (Message Oriented Middleware)(面向消息中间件)提供商都对JMS提供了支持。因此不同语言程序可以通过消息中间件进行交流。

什么是MOM(面向消息中间件)
MOM 是面向消息的中间件,使用消息传送提供者来协调消息传送操作。MOM 需要提供 API 和管理工具。客户端 使用 api 调用,把消息发送到由提供者管理的目的地。在发送消息之后,客户端会继续执行其他工作,并且在接收方收到这个消息确认之前,提供者一直保留该消息。
MOM的特点是消息异步接收,发送者不需要等待消息接收者响应;消息可靠接收,确保消息在中间件可靠保存,只有接收 方收到后才删除消息

JMS就是为了提供一套统一的规范让java程序能够访问现有的消息中间件,我们要介绍的activeMQ就是实现JMS规范的一个消息中间件,activeMQ的消息投递完全基于JMS规范实现,因此activeMQ一般的消息内容我们可以参考jms的规范去了解。

安装activeMQ
1.下载activeMQ压缩包
2.解压缩压缩包
3.进入解压路径/bin文件夹,执行activemq start,日志输出如下

root@zhoujy-VirtualBox:/usr/local/lib/apache-activemq-5.15.4/bin# ./activemq start
INFO: Loading '/usr/local/lib/apache-activemq-5.15.4//bin/env'
INFO: Using java '/usr/local/lib/jvm/jdk1.8.0_171/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/usr/local/lib/apache-activemq-5.15.4//data/activemq.pid' (pid '3762')

4.访问activeMQ管理平台http://ip:8161/admin,默认admin/admin
1.可能出现无法访问管理平台,尝试关闭linux系统的防火墙
2.在第3步出现第3步的输出时,程序不一定是成功启动的,ps -ef|grep activemq看一下有没有进程,如果没有,那么以下是排查方式。

activemq start启动activemq失败
1.activemq console命令打印日志,看有没有错误信息
我刚好遇到有的情况,如下所示

INFO: Loading '/usr/local/lib/apache-activemq-5.15.4//bin/env'
INFO: Using java '/usr/local/lib/jvm/jdk1.8.0_171/bin/java'
INFO: Starting in foreground, this is just for debugging purposes (stop process by pressing CTRL+C)
INFO: Creating pidfile /usr/local/lib/apache-activemq-5.15.4//data/activemq.pid
Java Runtime: Oracle Corporation 1.8.0_171 /usr/local/lib/jvm/jdk1.8.0_171/jre
  Heap sizes: current=63360k  free=58815k  max=1013632k
    JVM args: -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/usr/local/lib/apache-activemq-5.15.4//conf/login.config -Dcom.sun.management.jmxremote -Djava.awt.headless=true -Djava.io.tmpdir=/usr/local/lib/apache-activemq-5.15.4//tmp -Dactivemq.classpath=/usr/local/lib/apache-activemq-5.15.4//conf:/usr/local/lib/apache-activemq-5.15.4//../lib/: -Dactivemq.home=/usr/local/lib/apache-activemq-5.15.4/ -Dactivemq.base=/usr/local/lib/apache-activemq-5.15.4/ -Dactivemq.conf=/usr/local/lib/apache-activemq-5.15.4//conf -Dactivemq.data=/usr/local/lib/apache-activemq-5.15.4//data
Extensions classpath:
  [/usr/local/lib/apache-activemq-5.15.4/lib,/usr/local/lib/apache-activemq-5.15.4/lib/camel,/usr/local/lib/apache-activemq-5.15.4/lib/optional,/usr/local/lib/apache-activemq-5.15.4/lib/web,/usr/local/lib/apache-activemq-5.15.4/lib/extra]
ACTIVEMQ_HOME: /usr/local/lib/apache-activemq-5.15.4
ACTIVEMQ_BASE: /usr/local/lib/apache-activemq-5.15.4
ACTIVEMQ_CONF: /usr/local/lib/apache-activemq-5.15.4/conf
ACTIVEMQ_DATA: /usr/local/lib/apache-activemq-5.15.4/data
Loading message broker from: xbean:activemq.xml
 INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@6e1567f1: startup date [Sun Jul 29 23:17:36 CST 2018]; root of context hierarchy
 INFO | Using Persistence Adapter: KahaDBPersistenceAdapter[/usr/local/lib/apache-activemq-5.15.4/data/kahadb]
 INFO | KahaDB is version 6
 INFO | PListStore:[/usr/local/lib/apache-activemq-5.15.4/data/localhost/tmp_storage] started
 INFO | Apache ActiveMQ 5.15.4 (localhost, ID:zhoujy-VirtualBox-37526-1532877458229-0:1) is starting
 INFO | Listening for connections at: tcp://zhoujy-VirtualBox:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600
 INFO | Connector openwire started
ERROR | Failed to start Apache ActiveMQ (localhost, ID:zhoujy-VirtualBox-37526-1532877458229-0:1)
java.io.IOException: Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600 due to: java.net.BindException: 地址已在使用 (Bind failed)
.....
.....

看到关键的点,就是在activeMQ启动时,需要注册的一个端口5672被占用了,因此无法启动,我们看一下5672被什么进程占用
netstat -an|grep 5672

tcp6       0      0 :::5672                 :::*                    LISTEN  

无法grep到pid,此时只能通过修改/conf/activemq.xml配置里面的5672端口为别的端口才能启动程序了

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

找到对应地方,修改为5673,重启activemq,成功启动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值