1.加载凭据。属性文件
file:${activemq.conf}/credentials.properties
## ---------------------------------------------------------------------------
## Licensed to the Apache Software Foundation (ASF) under one or more
## contributor license agreements. See the NOTICE file distributed with
## this work for additional information regarding copyright ownership.
## The ASF licenses this file to You under the Apache License, Version 2.0
## (the "License"); you may not use this file except in compliance with
## the License. You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
# Defines credentials that will be used by components (like web console) to access the broker
activemq.username=system
activemq.password=manager
guest.password=password
1、 ActiveMQ内存设置
启动脚本:activemq的内存大小来自环境变量
#设置jvm内存配置
如果[-z“ $ ACTIVEMQ_OPTS_MEMORY”];然后
ACTIVEMQ_OPTS_MEMORY =“-Xms1G -Xmx1G”
fi

2、经纪人策略配置:

3、流控制
如果以嵌入式模式使用,则可以将新的SystemUsage添加到BrokerService。此处配置的memoryUsage必须小于jvm中设置的数量。
5. 9.版本0,如果设置的memoryUsagelimit大于实际可用的Java堆大小值,例如默认启动xmx = 1G,则实际的Java堆大小约为910M,
当代理启动时,log.error将提示设置内存时出错,然后强制实际的Java堆大小* 70%= 637M作为memoryUsagelimit。
splitSystemUsageForProducers消费会导致消费缓慢甚至无法消费。
实际上,在代理中,您还可以分别配置生产者使用的生产者系统使用情况和消费者使用的消费者系统使用情况。格式与systeUsage相同。
默认情况下,如果未配置producerSystemUsage和ConsumerSystemUsage,则生产者和消费者都使用systemUsage。

这时,生产者线程可能会用完内存,从而导致使用者线程处理缓慢,甚至无法使用。在这种情况下,添加消费计算机和消费数量可能不会提高消费速度。
解决方案是:
在代理上设置splitSystemUsageForProducersConsumers =“ true”,以便生产者线程和使用者线程使用它们自己的内存。
默认值为生产者线程内存:使用者线程内存= 6:4。
您还可以通过以下两个参数设置生产者线程存储器和使用者线程存储器的一半:
producerSystemUsagePortion = 50
consumerSystemUsagePortion = 50
生产者流控制
从5. x版本开始,您可以分别设置每个生产者的流控制。流控制只是意味着在内存使用限制下控制生产者的行为。当然,流控制的目的是防止当ActiveMQ用作内存MQ时,当生产速度大于消耗速度时,MQ爆炸的问题。
有两种情况:
1、同步发送消息(useAsynSend为false):这时,在SystemUsage的限制下,将使用destinationPolicy中policyEntry的限制,例如:
在非持久性时,将queueA的内存使用量限制为1mb。当达到此内存使用量时,生产者将被直接阻止,并且在没有可用内存之前,不允许生产者发送消息。
您还可以在systemUsage配置上将sendFailIfNoSpace =“ true”或sendFailIfNoSpaceAfterTimeout =“ 3000”设置为控制客户端异常和等待时间。
异步发送时,由于没有阻止生产者,所以
您可以使用connctionFactory.setProducerWindowSize(102400 0);
在代理确认收到消息之前,控制生产者可以发送的最大数据量(字节)。
消费流控制
通常在消费者方面,消费越快越好,经纪人积压越少越好。
但考虑到交易性质和客户确认,如果消费者一次收到很多消息但没有确认,则将导致交易上下文变大,并且“半消费状态”数据经纪人方面会增加。 ,因此ActiveMQ具有prefetchSize参数来控制无需确认即可预取的最大记录数。

默认条件如下:
永久队列:1000个条目
非持久队列:1000个条目
永久主题:100个项目
非持久性主题:无限
PrefetchSize可以通过3种方式设置
1、 tcp:// localhost:61616?jms.prefetchPolicy.all = 50
2、 tcp:// localhost:61616?jms.prefetchPolicy.queuePrefetch = 1
3、队列=新的ActiveMQQueue(“ TEST.QUEUE?consumer.prefetchSize = 10”);
--------------------------------------------------- -------------------------------------------------- ---------------------------------
4、协议
您可以看到其中有多个对象,每个对象都定义了所使用的侦听地址,端口和协议。不同的名称和uri属性值必须不同。上面的配置定义了四个不同的onnector>,然后在启动ActiveMQ时,可以看到以下输出:
INFO TransportServerThreadSupport - Listening for connections at:
tcp://localhost:61616
INFO TransportConnector - Connector openwire Started
INFO TransportServerThreadSupport - Listening for connections at:
ssl://localhost:61617
INFO TransportConnector - Connector ssl Started
INFO TransportServerThreadSupport - Listening for connections at:
stomp://localhost:61613
INFO TransportConnector - Connector stomp Started
INFO TransportServerThreadSupport - Listening for connections at:
xmpp://localhost:61222
INFO TransportConnector - Connector xmpp Started删除非必需的通信协议(客户端和代理,代理和代理使用此协议进行通信),仅保留TCP协议(特别注意61616是代理的侦听端口):
从客户端的角度来看,transportConnector的URI用于与代理建立连接,以通过该连接发送和接收消息。例如,以下Java代码通过先前配置文件中定义的“ openwire” transportConnector建立与代理的连接:
ActiveMQConnectionFactory factory =
new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
Session session =
connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 传输连接器可用的协议
ActiveMQ的最常见方案是作为单独的程序运行,并且客户端(包括消息生产者和使用者)通过某种网络协议与ActiveMQ建立连接,并发送和接收消息。 ActiveMQ支持多种网络协议,如下所示:
1.传输控制协议TCP

由于TCP具有可靠的传输特性,因此它也是ActiveMQ中使用时间最长的协议。在默认配置中,TCP连接端口为6161 6.。TCP连接器URI的配置语法如下:
tcp://主机名:端口?key = value&key = value
粗体部分为必填部分,其余键/值部分为可选部分,不同的键/值部分用“&”符号分隔。有关特定可选部件的详细说明,请参见本网站。可选部分用于定义代理的一些其他行为。例如,假设我们具有以下配置:
name =“ tcp” uri =“ tcp:// localhost:61616?trace = true” />
代理会将通过此连接器发送的每条消息记录在日志中,这对于调试非常有帮助。
2.新的I / O API协议(NIO)
NIO是在Java SE 1. 4中引入的,用于提供网络编程和对现代操作系统的基础I / O的访问。 NIO中最常用的两个功能是选择器和非阻塞I / O,它们使开发人员可以使用相同的资源来处理更多的网络连接(如果不使用NIO技术,则系统将无法承受这么多的网络连接)。
从客户端的角度来看,NIO传输连接器与TCP连接器相同。这是因为NIO连接器实际上使用TCP来传输数据。唯一的区别是NIO传输连接器是使用NIO API实现的。这使NIO更适合以下情况:
NIO的配置语法与TCP相似,只需将tcp替换为nio:
nio://主机名:端口?键=值
NIO的默认侦听端口是61618,它还具有跟踪,用于确定是否记录所有传输的消息。
3.用户数据包协议(UDP)
根据UDP的特性,它通常用于传出速率快并且可以容忍数据包丢失的情况。您可以使用UDP协议连接到ActiveMQ的UDP连接器。它的URI语法与TCP和NIO基本上相同:
udp://主机名:端口?键=值
完整的参考内容可以在中找到。通常,在以下两种情况下可以考虑使用UDP:
由于UDP的不可靠特性,使用它时必须考虑处理数据包丢失。
4. SSL协议(安全套接字层协议)
当代理暴露于不安全的网络环境中并且您的数据需要保密时,可以使用SSL。它是用于通过TCP传输加密数据的协议。它使用一对密钥(公钥和私钥)来确保安全通道。 ActiveMQ提供SSL连接器,其语法如下:
ssl:// hostname:port?key = value
由于ssl使用TCP进行传输,因此其选项与TCP相同。当然,如果需要更详细的描述,可以参考:另外,应注意,默认情况下,ssl连接器在端口616167上进行侦听。
与之前的3种协议不同,ssl连接器还需要ssl证书以确保其正确操作。 JSSE提供了两种类型的文件,用于存储密钥和证书。用于存储密钥的文件称为密钥库,用于存储证书的文件称为信任库。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-365351-1.html
不如生活成本涨得快