ActiveMQ配置分析及使⽤详解
  ⽬录结构:
  在Windows或Linux下查看AactiveMQ的⽬录结构,在5.15.3版本下,⽬录结构如下:
  bin:bin⽬录包含ActiveMQ启动脚本,包括Windows和Linux版本。
  conf:conf⽬录包含ActiveMQ服务、安全、账号、⽇志等配置。
  data:data⽬录存储ActiveMQ持久化数据以及⽇志⽂件,ActiveMQ使⽤Kahadb存储持久化消息。
  docs:docs⽬录包含⼀份ActiveMQ简单的使⽤说明⽂档。
  examples:examples⽬录是官⽅提供的⽰例,包括基于amqp、openwire、stomp等协议,java、python等语⾔的多协议多语⾔⽰例。
  lib:lib⽬录提供ActiveMQ在⼏种应⽤场景下所需jar依赖。
  webapps:webapps是ActiveMQ管理端Web实现,使⽤Jetty容器运⾏。
  webapps-demo:webapps-demo是ActiveMQ Demo样例。
  配置详解:
  AactiveMQ的配置⽂件基本都集中在conf⽬录下,⾥⾯包含很多⽅⾯的配置,接下来⼀⼀对配置⽂件进⾏解释:
  l:
  l是消息中间件通信主要配置⽂件,打开配置⽂件,下⾯显⽰的是已经删除相关注释的内容以及配置块解释:
<beans
xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd
/schema/core /schema/core/activemq-core.xsd">
<!-- 加载credentials.properties⽂件,此⽂件中包含鉴权信息 -->
<bean class="org.springframework.fig.PropertyPlaceholderConfigurer">
<property name="locations">
<value>file:${f}/credentials.properties</value>
</property>
</bean>
<!-- 审计⽇志 -->
<!-- 审计⽇志 -->
<bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
lazy-init="false" scope="singleton"
init-method="start" destroy-method="stop">
</bean>
<!-- ActiveMQ代理配置 -->
<broker xmlns="/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" >
<pendingMessageLimitStrategy>
<!-- 内存中⾄多存储1000条消息,其余将会被删除或保存在temp store中 -->
<constantPendingMessageLimitStrategy limit="1000"/>
</pendingMessageLimitStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<!-- 针对JMX进⾏配置 -->
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
<!-- 持久化适配器,使⽤Kahdb进⾏消息持久化存储 -->
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
<!-- 系统使⽤情况 -->
<systemUsage>
<systemUsage>
<memoryUsage>
<!-- 内存使⽤情况 -->
<memoryUsage percentOfJvmHeap="70" />
</memoryUsage>
<storeUsage>
<!-- 存储最⼤可⽤. -->
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<!-- 临时存储可⽤⼤⼩ -->
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
<!-- destroy the spring context on shutdown to stop jetty -->
<shutdownHooks>
<bean xmlns="/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
</shutdownHooks>
</broker>
<import resource="l"/>
</beans>
  **Prefetch机制:**constantPendingMessageLimitStrategy标签相关,ActiveMQ通过Prefetch机制来提⾼性能,通过消息消费者端缓存消息来加速处理,如果消息消费者达到设置上限,则不会再接收消息,除⾮消息消费者主动对消息进⾏确认,再重新接收消息。
  **transportConnectors:**该标签配置了ActiveMQ的传输链接,接下来⼀⼀介绍⼏种传输链接配置:
  TCP协议:
  ActiveMQ的Broker和Client之间,为了保证⾼稳定性的通信,可以使⽤TCP协议实现:
  · 默认配置 tcp://hostname:port?key=value&key=value,默认端⼝61616
  · 使⽤wire protocol进⾏序列化,ActiveMQ将wire protocol命名为OpenWire。
  · 使⽤TCP,通过字节流⽅式传输保证⾼效性、应⽤⼴泛、⽀持任意平台、保证数据传输可靠性。
  NIO协议:
  NIO是JDK1.4引⼊的新⼀代IO,相较于传统的BIO,NIO提供了同步⾮阻塞解决⽅案,可以为服务端
带来更⼤的吞吐量,并提⾼服务端可⽤性。
  · 配置格式nio://hostname:port?key=value。
  · ⼤量客户端连接到Broker时,NIO协议可以⽐TCP需要更少的线程,进⽽减轻Broker服务压⼒。
  · NIO⽐TCP提供更好的性能,减少Broker服务延迟。
  UDP协议:
  UDP与TCP的区别:
  · TCP⾯向连接,UDP⽆需连接。
  · TCP提供可靠服务,保证数据传输⽆差错、不丢失、不重复,不乱序,UDP尽⼒保证交付,但不保证可靠性。
  · TCP⾯向字节流,UDP⾯向报⽂。
  · TCP通信是点对点,UDP⽀持⼀对⼀、⼀对多、多对⼀和多对多等交互。
  · TCP的逻辑通信信道是全双⼯的可靠信道,UDP的逻辑信号是不可靠信道。
pending
  尽管在可靠性⽅⾯相⽐,TCP更加可靠,但是UDP亦可在很多场景中得到引⽤,ActiveMQ集成了UDP协议:
  · 配置格式 udp://hostname:port?key=value。
  · 穿透防⽕墙、减少传递延迟、快速传递数据时,可以使⽤UDP协议。
  HTTP协议:
  随着Web2.0的崛起,HTTP随着Web应⽤的推⼴,应⽤也随着变的越来越⼴泛,ActiveMQ可以很⽅便的集成HTTP协议。
  · 基于http协议的Broker可以穿透防⽕墙。
  SSL协议:
  SSL协议构建在TCP协议之上,属于应⽤层协议,在HTTP协议外部提供安全可靠的通信管道,在对安全传输要求⽐较场合,可以使⽤基于SSL协议的ActiveMQ。
  · 配置格式 ssl://hostname:port?key=value
  · 除了配置协议链接外,需要配置SSL协议的证书
<sslContext>
<sslContext
keyStore="file:${activemq.base}/conf/sslcert.ks"
keyStorePassword="sslpwd"
trustStore="file:${activemq.base}/conf/sslcert.ks"
trustStorePassword="sslpwd"
/>
</sslContext>
  VM协议:
  ActiveMQ Broker可以内嵌到应⽤程序中,此时引⽤程序可以通过VM协议与Broker进⾏通信,此时通讯⽆需经过你⽹络,因⽽可以达到最⾼的性能。
  · 配置格式 vm://brokerName?transportOptions
  · 第⼀个创建VM连接的客户端会启动⼀个embed VM broker,之后所有使⽤相同broker name的VM连接都会使⽤这个broker。  · broker上所以连接都关闭时,broker亦会随之关闭。
  AMQP协议:
  AMQP(Advanced Message Queuing Protocol,⾼级消息队列协议)是在JMS协议之上提出的⼯业级的消息中间件解决⽅
案,ActiveMQ亦⽀持基于AMQP协议的消息处理。
  · 配置格式 amqp://hostname:port?key=value,默认端⼝5672。
  · 基于AMQP协议,遵循协议相关、实现⽆关性,可以轻易实现跨语⾔、跨平台。
  STOMP协议:
  STOMP(Streaming Text Orientated Message Protocol,流⽂本定向消息协议),提供了⼀个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进⾏交互。STOMP协议由于设计简单,基于开发客户端,因此应⽤较⼴泛。
  STOMP协议的前⾝是TTMP协议,⼀个简单的基于⽂本的协议,转为消息中间件设计。
  配置格式 stomp://hostname:port?key=value,默认端⼝61613。
  STOMP协议简单,服务端实现复杂,但客户端实现简单,集成简约、⽅便。
  MQTT协议:
  MQTT是⼀个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使得其应⽤较为⼴泛。
 · 配置格式 mqtt://hostname:port?key=value,默认端⼝1883。
 WS协议:
 WS协议是⼀种在单个TCP连接上进⾏全双⼯通信的协议,WS使得客户端和服务器之间的数据交换变得更加简单,允许服务器主动向客户端推送数据。
  · 配置格式 ws://hostname:port?key=value,默认端⼝61614。
  credentials.properties、credentials-enc.properties、users.properties、groups.properties:
  credentials.properties保存着客户端建⽴连接需要的账号密码信息,使⽤这个信息前,需要在l中broker节点内新增节点。
  credentials.properties内容:
activemq.username=system
activemq.password=manager
guest.password=password
  l中broker内新增节点:
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser
username="{activemq.username}"
password="{activemq.password}"groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
  {activemq.username}和{activemq.password}引⽤的值即为credentials.properties中对应的值。
  credentials-enc.properties内为credentials.properties内容的密⽂形式。
  users.properties规定了ActiveMQ的当前账号。
  groups.properties规定了ActiveMQ的当前账号⾓⾊。
  l、jetty-realm.properties:
  l和jetty-realm.properties是管理端页⾯Web容器Jetty的服务配置,作为ActiveMQ的辅助功能,只需简单了解即可。jetty-realm.properties保存着jetty账户密码信息。
  l中只需了解服务端⼝配置:
<bean id="jettyPort"class="org.apache.activemq.web.WebConsolePort"init-method="start">
<!-- the default port number for the web console -->
<property name="host"value="0.0.0.0"/>
<property name="port"value="8161"/>
</bean>
  jmx.access、jmx.password:
  JMX在Java编程语⾔中定义了应⽤程序以及⽹络管理和监控的体系结构、设计模式、应⽤程序接⼝以及服务。通过使⽤JMX可以监控ActiveMQ的运⾏状态和管理系统某些功能,⽐如清除缓存等。jmx.access定义了⽤户的使⽤权限,jmx.password定义了客户端使⽤JMX 的账号密码。
  log4j.properties、logging.properties:
  log4j.properties和logging.properties是关于运⾏时ActiveMQ的⽇志配置。
  以上就是ActiveMQ的主要配置,其中l是最主要的配置,⽽transportConnectors则是acti

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。