配置
配置 ActiveMQ-CPP
ActiveMQ 的配置非常灵活,我们决定在 ActiveMQ-CPP 中采用类似的方法。所有配置都是通过 URI 编码的参数实现的,这些参数可以在连接或目标上设置。通过 URI,您可以配置 ActiveMQ-CPP 客户端的几乎所有方面。下面的表格展示了参数的完整集合。
连接 URI 参数
示例配置
第一个示例使用标准的基于 TCP 的传输。
cf = new ActiveMQConnectionFactory(
"tcp://127.0.0.1:61616?wireFormat=openwire&wireFormat.tightEncodingEnabled=true");
为了更可靠的连接,请使用 Failover 传输,并在备用位置配置连接。
cf = new ActiveMQConnectionFactory(
"failover://(tcp://127.0.0.1:61616,tcp://anotherhost:61616)?connection.useAsyncSend=true");
协议选项
选项名称 | 描述 |
---|---|
tcp | 使用 TCP/IP 套接字连接到代理。 |
ssl | 使用 OpenSSL 来保护 TCP/IP 套接字。(自 v3.2.0 起) |
failover | 其他传输的组合,当传输连接失败时,Failover 传输连接到列表中的下一个传输,或重试与失败的代理 URI 的连接。 |
套接字选项
选项名称 | 默认 | 描述 |
---|---|---|
inputBufferSize | 10000 | 缓冲输入流缓冲区中的字节数 |
outputBufferSize | 10000 | 缓冲输出流缓冲区中的字节数 |
soLinger | 0 | 套接字 SOLinger 值 |
soKeepAlive | false | 套接字 SOKeepAlive 值 |
soReceiveBufferSize | -1 | 套接字接收缓冲区。如果为 -1,则使用操作系统默认值。 |
soSendBufferSize | -1 | 套接字发送缓冲区。如果为 -1,则使用操作系统默认值。 |
soConnectTimeout | -1 | 套接字连接超时(以微秒为单位)。如果为 -1,则使用操作系统默认值。(自 ActiveMQ-CPP 2.2 起) |
tcpNoDelay | true | 设置套接字级别的 TCP_NODELAY 选项 |
通用传输选项
选项名称 | 默认 | 描述 |
---|---|---|
transport.commandTracingEnabled | false | 如果为 true,则启用对传入和传出传输命令的跟踪 |
transport.tcpTracingEnabled | false | 如果为 true,则启用对原始网络 IO(以十六进制表示)的跟踪 |
transport.useAsyncSend | false | 如果为 true,则启用异步发送消息。*警告:如果消息正在排队并且客户端已关闭或崩溃,则使用此选项可能会导致数据丢失。* (自 ActiveMQ-CPP 2.2.2 起已弃用,此版本无影响,请改用 connection.useAsyncSend) |
transport.ResponseCorrelator.maxResponseWaitTime | 3000 | 等待代理响应的毫秒数。(自 ActiveMQ-CPP 2.2.1 起已移除,请改用 connection.sendTimeout) |
Failover 传输选项
选项名称 | 默认 | 描述 |
---|---|---|
initialReconnectDelay | 10 | 如果最初尝试连接到代理失败,则等待多长时间。 |
maxReconnectDelay | 30000 | 传输尝试再次连接到代理之前等待的最长时间。 |
useExponentialBackOff | true | 每次尝试之间的延迟是否应增长到最大重连延迟 |
maxReconnectAttempts | 0 | 在传输失败之前尝试重新连接的次数,默认值为永远(0)。 |
startupMaxReconnectAttempts | 0 | 在传输失败之前尝试重新连接的次数,默认值为永远(0)。仅适用于初始尝试连接,在一次成功连接后,从那时起 maxReconnectAttempts 标志适用。(自 v3.2.0 起) |
randomize | true | 传输是否应尝试以随机顺序连接到列出的代理 URI。 |
backup | false | Failover 传输是否应维护热备份。 |
backupPoolSize | 1 | 如果启用,则建立热备份连接的数量。 |
timeout | -1 | 如果发送被阻塞等待失败的连接重新连接,它应该等待多长时间才能失败发送,默认值为永远(-1)。 |
事务选项
选项名称 | 默认 | 描述 |
---|---|---|
transaction.maxRedeliveryCount | 5 | 最大重试次数。(在 v3.2.0 中已移除,请改用连接重试策略) |
连接选项
选项名称 | 默认 | 描述 |
---|---|---|
connection.sendTimeout | 0 | 等待消息发送响应的时间,默认值为零表示永远等待。永远等待允许代理对来自此客户端的消息进行流控,如果这是一个快速生产者或没有消费者,这样代理如果不能减慢生产者速度就会耗尽内存。不影响 Stomp 客户端,因为发送由代理确认。 (自 ActiveMQ-CPP 2.2.1 起) |
connection.producerWindowSize | 0 | ProducerWindowSize 是生产者在等待代理确认它已接受先前发送的消息之前,可以发送到代理的内存中的最大字节数。换句话说,这就是您配置用于异步发送的生产者流控窗口的方式,其中客户端负责管理内存使用情况。默认值为 0 表示客户端没有流控。另请参阅 生产者流控。此选项仅影响 Openwire 客户端,因为 Stomp 没有异步通知客户端已接受消息的方式。(自 ActiveMQ-CPP 2.2.2 起) |
connnection.closeTimeout | 15000 | 关闭时等待代理响应的时间。通常,我们希望得到一个响应,表明客户端已干净地断开连接,但我们不想永远等待,但是如果您想永远等待,请将其设置为零。(自 ActiveMQ-CPP 2.2.1 起) |
connection.useAsyncSend | false | 强制使用异步发送,这会极大地提高性能;但意味着 send() 方法将立即返回,无论消息是否已发送,这可能会导致消息丢失。通常情况下,只有不在事务中的持久性消息才会同步发送,使用此选项会强制这些消息也异步发送。(自 ActiveMQ-CPP 2.2.2 起) |
connection.alwaysSyncSend | false | 强制所有发送的消息都同步发送,覆盖 useAsyncSend 标志的任何使用情况。这在某些情况下可能会降低性能,因为我们通常仅同步发送不在事务中的持久性消息。此选项保证在代理确认收到消息之前,不会返回任何发送。(自 ActiveMQ-CPP 2.2.2 起) |
connection.useCompression | false | 是否应使用 ZLib 压缩算法压缩传出的消息的主体部分(自 v3.2.0 起) |
connection.dispatchAsync | true | 代理是否应该 异步将消息分派 到消费者,这会导致来自此连接的所有消费者使用此设置。(自 v3.2.0 起) |
连接策略选项
自 3.2.0 版本起,Connection 对象支持控制其行为和创建的 Consumer 对象的各个方面的策略。
预取策略
选项名称 | 默认 | 描述 |
---|---|---|
cms.PrefetchPolicy.durableTopicPrefetch | 100 | 持久主题的最大预取 |
cms.PrefetchPolicy.queueBrowserPrefetch | 500 | 队列浏览器的最大预取 |
cms.PrefetchPolicy.queuePrefetch | 1000 | 队列或临时队列的最大预取 |
cms.PrefetchPolicy.topicPrefetch | 65535 | 主题或临时主题的最大预取 |
重试策略
选项名称 | 默认 | 描述 |
---|---|---|
cms.RedeliveryPolicy.backOffMultiplier | 5.0 | 当启用 _useExponentialBackOff 选项时,用于扩展重试窗口。 |
cms.RedeliveryPolicy.collisionAvoidancePercent | 15 | 添加到重试回退的随机百分比,以防止在回滚中多个消费者同时进行重试。 |
cms.RedeliveryPolicy.initialRedeliveryDelay | 1000 | 在开始重试之前等待的时间量(以毫秒为单位)。 |
cms.RedeliveryPolicy.maximumRedeliveries | 6 | 在放弃并对消息执行 NAck 操作之前尝试重试的最大次数。 |
cms.RedeliveryPolicy.useCollisionAvoidance | false | 是否应将随机避免百分比添加到重试延迟中。 |
cms.RedeliveryPolicy.useExponentialBackOff | false | 每次循环的重试是否应减缓。 |
线格式协议选项
选项名称 | 默认 | 描述 |
---|---|---|
wireFormat | openwire | 选择要使用的线格式。开箱即用,可以是 stomp 或 openwire。 |
wireFormat.stackTraceEnabled | false | 代理上发生的异常的堆栈跟踪是否应发送到客户端?仅由 openwire 协议使用。 |
wireFormat.cacheEnabled | false | 是否应缓存常用重复值,以减少编组?仅由 openwire 协议使用。 |
wireFormat.tcpNoDelayEnabled | true | 不影响线格式,但会向对等方提供一个提示,即应在通信套接字上启用 TCP nodelay。仅由 openwire 协议使用。 |
wireFormat.sizePrefixDisabled | false | 序列化消息是否应包含有效载荷长度前缀?仅由 openwire 协议使用。 |
wireFormat.tightEncodingEnabled | false | 是否应将线大小优化为 CPU 使用率?仅由 openwire 协议使用。 |
wireFormat.maxInactivityDuration | 30000 | 最大不活动持续时间(在此之前套接字被认为已死)以毫秒为单位。在某些平台上,套接字可能需要很长时间才能看起来像死掉一样,因此我们允许代理在连接不活动一段时间后杀死连接。由某些传输使用以启用保持活动的心跳功能。设置为 <= 0 的值以禁用不活动监控。 |
maxInactivityDurationInitalDelay | 10000 | 开始最大不活动检查的初始延迟(是的,“Inital”这个词应该故意拼错) |
目标 URI 参数
示例配置
d = session->createTopic("com.foo?consumer.prefetchSize=2000&consumer.noLocal=true");
通用选项
选项名称 | 默认 | 描述 |
---|---|---|
consumer.prefetchSize | 1000 | 消费者将 预取 的消息数量。 |
consumer.maximumPendingMessageLimit | 0 | 用于控制如果存在 慢速消费者 情况,消息是否会被丢弃。 |
consumer.noLocal | false | 与主题消费者上的 noLocal 标志相同。在这里公开,以便它可以与队列一起使用。 |
consumer.dispatchAsync | false | 代理是否应该 异步将消息分派 到消费者。 |
consumer.retroactive | false | 这是一个 追溯消费者 吗。 |
consumer.selector | null | 与消费者一起使用的 JMS 选择器。 |
consumer.exclusive | false | 这是一个 独占消费者 吗。 |
consumer.priority | 0 | 允许您配置 消费者优先级。 |
仅限 OpenWire 的选项
选项名称 | 默认 | 描述 |
---|---|---|
consumer.browser | false | |
consumer.networkSubscription | false | |
consumer.optimizedAcknowledge | false | 启用优化确认模式,消息以批次而不是单独确认。或者,您可以为消费者使用 Session.DUPS_OK_ACKNOWLEDGE 确认模式,这通常更快。警告启用此功能可能会导致重新连接时自动确认出现一些问题。 |
consumer.noRangeAcks | false | |
consumer.retroactive | false | 设置是否启用追溯消费者。追溯消费者允许非持久主题订阅者接收在非持久订阅者启动之前发布的旧消息。 |