4.21.9. 配置下游队列联合
以下示例演示了如何配置下游队列合作。
通过下游队列联合,您可以在本地代理中添加一个或多个远程代理用来连接到本地代理的配置。这种方法的优势在于,您可以在单个代理上保持所有联合配置。这可能是对 hub-and-spoke 拓扑的一个实用方法,例如:
注意
下游队列联合会反转连接与上游队列配置的方向。因此,当您在配置中添加远程代理时,这些代理被视为 下游 代理。下游代理使用配置中的连接信息来连接本地代理,现在被视为是上游的。在这个示例中会对此进行说明,当您为远程代理添加配置时。
先决条件
- 您应该熟悉上游队列合作的配置。请参阅 第 4.21.8 节 “配置上游队列联合”。
- 以下示例演示了如何在独立代理之间配置队列联合。但是,您还应熟悉为代理 集群配置 联合的要求。如需更多信息,请参阅 第 4.21.4 节 “为代理集群配置联合”。
步骤
-
打开
<broker-instance-dir>/etc/broker.xml
配置文件。 添加包含
<federation>
元素的<federations>
元素。例如:<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> </federation> </federations>
添加队列策略配置。例如:
<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="new-transformer"> <include queue-match="#" address-match="queue.bbc.new" /> <include queue-match="#" address-match="queue.usatoday" /> <include queue-match="#" address-match="queue.news.#" /> <exclude queue-match="#.local" address-match="#" /> </queue-policy> </federation> ... </federations>
如果要在传输前转换信息,请添加转换器配置。例如:
<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="news-transformer"> <include queue-match="#" address-match="queue.bbc.new" /> <include queue-match="#" address-match="queue.usatoday" /> <include queue-match="#" address-match="queue.news.#" /> <exclude queue-match="#.local" address-match="#" /> </queue-policy> <transformer name="news-transformer"> <class-name>org.foo.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> ... </federations>
为每个远程代理添加
下游
元素。例如:<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <downstream name="eu-east-1"> <static-connectors> <connector-ref>eu-east-connector1</connector-ref> </static-connectors> <transport-connector-ref>netty-connector</transport-connector-ref> <policy ref="news-address-federation"/> </downstream> <downstream name="eu-west-1" > <static-connectors> <connector-ref>eu-west-connector1</connector-ref> </static-connectors> <transport-connector-ref>netty-connector</transport-connector-ref> <policy ref="news-address-federation"/> </downstream> <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="new-transformer"> <include queue-match="#" address-match="queue.bbc.new" /> <include queue-match="#" address-match="queue.usatoday" /> <include queue-match="#" address-match="queue.news.#" /> <exclude queue-match="#.local" address-match="#" /> </queue-policy> <transformer name="news-transformer"> <class-name>org.foo.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> ... </federations>
如前面的配置中所示,远程代理现在被视为本地代理的下游。下游代理使用配置中的连接信息返回本地(即 上游)代理。
在本地代理中,添加由本地和远程代理使用的连接器和接收器,以建立联合连接。例如:
<connectors> <connector name="netty-connector">tcp://localhost:61616</connector> <connector name="eu-west-1-connector">tcp://localhost:61616</connector> <connector name="eu-east-1-connector">tcp://localhost:61617</connector> </connectors> <acceptors> <acceptor name="netty-acceptor">tcp://localhost:61616</acceptor> </acceptors>
connector name="netty-connector"
- 本地代理发送到远程代理的连接器配置。远程代理使用此配置来连接本地代理。
connector name="eu-west-1-connector"
,connector name="eu-east-1-connector"
- 远程代理连接器。本地代理使用这些连接器连接到远程代理,并共享远程代理需要连接本地代理的配置。
acceptor name="netty-acceptor"
- 接受与远程代理用来连接到本地代理的连接器相对应的本地代理。