欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第十章 代理商拓扑结构【笔记】

程序员文章站 2022-05-05 13:12:17
...

10.1、概述:本章主要是ActiveMQ 集群 拓扑结构设计

10.2、代理商高可用性

一般故障分为 网络故障,硬件故障,软件故障,对于ActiveMQ来说就是如何改善的软件故障来提供高可用性。

介绍三种 主/从结构

10.2.1. 分享式主从结构

第十章 代理商拓扑结构【笔记】

到主代理器挂了,有两种操作

第一种:从代理器也关闭

第二种:从代理器上位成主代理器

如果是第二种可以如下配置

failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false

10.2.1.1.配置分享式主/从

remoteURI:主代理器监听地址

userName: 可选,用户名

password : 可选,密码

master(主代理器配置)

<services>
<masterConnector remoteURI= "tcp://localhost:62001" userName="Rob" password="Davies"/>
</services>
slave(从代理器配置)

shutdownOnmasterFailure : 默认值false, 当master挂了,slave将会关闭

waitForslave: 默认值false  , 在从代理器没有与主代理器通讯时不允许客户端访问

shutdownOnslaveFailure , 默认值为false, 如果为true,如果slave断开的时候,master将会关闭

10.2.1.2.什么时候使用master/slave

可以人工干预,你可以用于已经运行中代理器中配置高可用性

10.2.2. 分享数据库 主从

第十章 代理商拓扑结构【笔记】

10.2.2.1、什么时候使用数据库主从

它的性能低于分享式主从,它不需要额外配置和slave数量的限制

10.2.3.分享式文件系统主从

第十章 代理商拓扑结构【笔记】

SAN(Storage area network): 例如 Network File System (NFS)  、Global File System (GFS)

10.2.3.1、什么时候使用分享文件系统主从

它与AMQMessageStore 或KahaDB整合使用,它的唯一缺陷,只支持分布锁环境文件系统

10.3 网络代理器

通过网络进行传输数据

10.3.1、 存储和传输

第十章 代理商拓扑结构【笔记】

以上是单向通道,如果是双向通道

第十章 代理商拓扑结构【笔记】






文件配置为:

<networkConnectors>
<networkConnector uri="static://(tcp://backoffice:61617)"
name="bridge"
duplex="true"
conduitSubscriptions="true"
decreaseNetworkConsumerPriority="false">
</networkConnector>
</networkConnectors>

配置的顺序要求

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://activemq.org/config/1.0">
    <broker brokerName="receiver" persistent="true" useJmx="true">
        <networkConnectors>
            <networkConnector uri="static:(tcp://backoffice:61617)" />
        </networkConnectors>
        <persistenceAdapter>
            <kahaDB />
            <kahaDB></kahaDB>
        </persistenceAdapter>
        <transportConnectors>
            <transportConnector uri="tcp://localhost:62002" />
        </transportConnectors>
    </broker>
</beans>

高性能网络配置

引用《ActiveMQ in Action》

第十章 代理商拓扑结构【笔记】

10.3.2. 网络发现

网络发现有两种:

1、动态(dynamic):自动搜索发现新代理器(使用multicast)

2、静态(Static):列举所有网络(static)

<networkConnectors>
<networkConnector uri="multicast://default"/>
</networkConnectors>

<networkConnectors>
<networkConnector uri="static:(tcp://remote-master:61617,tcp://remote-slave:61617)"/>
</networkConnectors>
static 的配置参数有:

initialReconnectDelay(默认值为1000)单位毫秒初始化重连延迟,只有useExponentialBackOff不可用

maxReconnectDelay (默认值为30000)最大延迟,只有useExponentialBackOff不可用
useExponentialBackOff: (默认值为true)重连时间等待时间会更长

backOffMultiplier:(默认值为2) 这是增加useExponentialBackOff重连等待时间的基数

例如:

<networkConnectors>
<networkConnector uri="static:(tcp://remote:61617)?useExponentialBackOff=false"/>
</networkConnectors>

10.3.3,网络配置

10.3.3.1. 网络属性:dynamicOnly

默认值为false,如果为true,活动时候才会传递消息给远程代理器

10.3.3.2、网络属性:prefetchSize

默认值为1000,读取远程代理器打包消息大小

10.3.3.3网络属性:conduitSubscriptions

避免多个代理器发送消息重复

10.3.3.4.网络属性:excludedDestinations

去除目的地

它优先级高于staticallyIncludedDestinations和dynamicallyIncludedDestinations.(也就是这两个属性设置无效)

例子:

<networkConnectors>
    <networkConnector uri="static:(tcp://remote:61617)?useExponentialBackOff=false" />
    <excludedDestinations>
        <queue physicalName="audit.queue-1" />
        <queue physicalName="audit.queue-2" />
        <queue physicalName="local.>" />
        <topic physicalName="local.>" />
    </excludedDestinations>
</networkConnectors>

10.3.3.5、网络属性:dynamicallyIncludedDestinations

包含目的地(白名单)

10.3.3.6、网络属性:staticallyIncludedDestinations

包含目的地(白名单)

<networkConnectors>
    <networkConnector uri="static:(tcp://remote:61617)?useExponentialBackOff=false" />
    <staticallyIncludedDestinations>
        <queue physicalName="management.queue-1" />
        <queue physicalName="management.queue-2" />
        <queue physicalName="global.>" />
        <topic physicalName="global.>" />
    </staticallyIncludedDestinations>
</networkConnectors>

10.3.3.7、网络属性:decreaseNetworkConsumerPriority

默认值为false,如果设置true,表示本地优先级高于远程

10.3.3.8、网络属性:networkTTL

默认值为1,心跳

10.3.3.9,网络属性:name

默认值是bridge,一般忽略这个参数,保证唯一

<networkConnectors>
    <networkConnector uri="static://(tcp://remotehost:61617)" name="queues_only" duplex="true">
        <excludedDestinations>
            <topic physicalName=">" />
        </excludedDestinations>
    </networkConnector>
    <networkConnector uri="static://(tcp://remotehost:61617)" name="topics_only" duplex="true">
        <excludedDestinations>
            <queue physicalName=">" />
        </excludedDestinations>
    </networkConnector>
</networkConnectors>

10.4、应用分割

实现高并发,负载均衡

10.4.1、垂直分割

设置传输为nio

<broker>
<transportConnectors>
<transportConnector name="nio" uri="nio://localhost:61616"/>
</<transportConnectors>
</broker>
设置线程池

ACTIVEMQ_OPTS="-Dorg.apache.activemq.UseDedicatedTaskRunner=false"

同时设置虚拟机内存大小

ACTIVEMQ_OPTS="-Xmx1024M -Dorg.apache.activemq.UseDedicatedTaskRunner=false"

设置代理器的内存大小:对于100多个连接最小内存大小512MB

<systemUsage>
    <systemUsage>
        <memoryUsage>
            <memoryUsage limit="512 mb" />
        </memoryUsage>
        <storeUsage>
            <storeUsage limit="10 gb" name="foo" />
        </storeUsage>
        <tempUsage>
            <tempUsage limit="1 gb" />
        </tempUsage>
    </systemUsage>
</systemUsage>


为了减少CPU加载连接,需要将tightEncodingEnabled设置为false

String uri = "failover://(tcp://localhost:61616?wireFormat.tightEncodingEnabled=false)";
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory(url);
设置队列最优化

<destinationPolicy>
    <policyMap>
        <policyEntries>
            <policyEntry queue=">" optimizedDispatch="true" />
        </policyEntries>
    </policyMap>
</destinationPolicy>

“>”表示所有队列(Queues)

整体配置文件如下

<?xml version="1.0"?>
<broker xmlns="http://activemq.org/config/1.0" brokerName="amq-broker" dataDirectory="${activemq.base}/data">
    <persistenceAdapter>
        <kahaDB directory="${activemq.base}/data" journalMaxFileLength="32mb" />
    </persistenceAdapter>
    <destinationPolicy>
        <policyMap>
            <policyEntries>
                <policyEntry queue=">" optimizedDispatch="true" />
            </policyEntries>
        </policyMap>
    </destinationPolicy>
    <systemUsage>
        <systemUsage>
            <memoryUsage>
                <memoryUsage limit="512 mb" />
            </memoryUsage>
            <storeUsage>
                <storeUsage limit="10 gb" name="foo" />
            </storeUsage>
            <tempUsage>
                <tempUsage limit="1 gb" />
            </tempUsage>
        </systemUsage>
    </systemUsage>
    <!-- The transport connectors ActiveMQ will listen to -->
    <transportConnectors>
        <transportConnector name="openwire" uri="nio://localhost:61616" />
    </transportConnectors>
</broker>

10.4.2.水平分割

随机连接

failover://(tcp://broker1:61616,tcp://broker2:61616)?randomize=true

为了代理器之间消息不孤立,如下设置

<networkConnector uri="static://(tcp://remotehost:61617)"
name="bridge"
dynamicOnly="true"
prefetchSize="1"
</networkConnector>

10.4.3、交通分配(traffic partitioning )

traffic partitioning 是垂直和水平分割的混合体,
第十章 代理商拓扑结构【笔记】

引用《ActiveMQ in Action》