4.22.9. 配置下游队列联合
以下示例演示了如何配置下游队列联合。
下游队列联合允许您在本地代理中添加一个或多个远程代理连接到本地代理的配置。这种方法的优势在于,您可以在单个代理中保留所有联合配置。例如,这可能是集线拓扑的有用方法。
注意
下游队列联合会颠倒联合连接与上游队列配置的方向。因此,当您将远程代理添加到配置时,这些代理被视为 下游 代理。下游代理使用配置中的连接信息来连接回本地代理,现在被视为上游。本例稍后将对此进行说明,当您为远程代理添加配置时。
先决条件
- 您应该熟悉上游队列联合的配置。请参阅 第 4.22.8 节 “配置上游队列联合”。
- 以下示例演示了如何在独立代理之间配置队列联合。但是,您还应熟悉为代理 集群配置 联合的要求。如需更多信息,请参阅 第 4.22.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"
- 本地代理上的接收器,对应于远程代理用来连接到本地代理的连接器。