且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

ActiveMQ详细配置方案

更新时间:2022-07-06 01:54:03

一、高可用Failover配置

failover:(uri,...,urlN)?transportOptions负载均衡,默认使用随机的uri进行连接,可以在多个broker中达到负载均衡的效果,有两种方式:

  • failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false​默认优先使用primary,只有当primary机器掉线之后,会自动转移到secondary,但是当primary又重新恢复之后,不会自动切换会primary。
  • failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false&priorityBackup=true​默认优先使用primary,只有当primary机器掉线之后,会自动转移到secondary,但是当primary又重新恢复之后,又会自动切换回primary。


以上两种方式都会存在一个问题,就是当切换到备用机之后,主机器还可能遗留一些未处理的数据,为了解决这个问题,可以在集群之间搭建一个network,这样子数据可以在多个broker之间流转。


二、消息策略配置

  • 禁掉scheduler功能
<broker>节点增加schedulerSupport="false"</broker>
  • 配置按照顺序分发策略
<dispatchPolicy>
    <!--按顺序分发-->
    <strictOrderDispatchPolicy />
</dispatchPolicy>
  • 配置恢复策略
<subscriptionRecoveryPolicy>
    <!--只恢复最后一个message-->
    <lastImageSubscriptionRecoveryPolicy />
</subscriptionRecoveryPolicy>
  • 配置networkConnector
<networkConnectors>
      <networkConnector uri="static:(tcp://127.0.0.1:61617,tcp://127.0.0.1:61616)"/>
</networkConnectors>
  • 配置消息回流到broker
 <destinationPolicy>
            <policyMap>
              <policyEntries>
                <policyEntry queue="test.>" enableAudit="false">
                        <networkBridgeFilterFactory>
                                         <conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true" />
                        </networkBridgeFilterFactory>
                  <pendingMessageLimitStrategy>
                    <constantPendingMessageLimitStrategy limit="1000"/>
                  </pendingMessageLimitStrategy>
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy>

三、权限配置

  • 配置用户名密码
<bean id="securityConstraint" class="org.eclipse.jetty.http.security.Constraint">
        <property name="name" value="BASIC" />
        <property name="roles" value="admin" />
        <property name="authenticate" value="false" />
</bean>

四、发送方式配置

  • 同步发送
failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false&jms.useAsyncSend=false&priorityBackup=true
  • 异步发送
failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false&jms.useAsyncSend=true&priorityBackup=true