发现
发现代理
ActiveMQ Classic 使用名为 Discovery Agent 的抽象来检测远程服务,例如远程代理。我们可以使用发现来让 JMS 客户端自动检测要连接的消息代理,或者提供 代理网络
目前有两种类型的发现代理。
组播
Discovery 传输使用我们自己的基于组播的发现代理来查找要连接的 URI 列表。
有关更多信息,请参阅 Discovery 传输参考。
Zeroconf
ZeroConf 是一种标准的发现规范,它使用 UDP / 组播来发现设备。它被 Apple 的 Rendezvous 服务使用。
我们使用 jmDNS 项目来实现 Zeroconf 规范以检测服务。这意味着其他 Zeroconf
基于工具可以与该发现代理一起使用。
要在代理中配置发现,您应该使用 XML 配置。以下是如何使用发现来创建 代理网络 的 示例。
如果您有一个或多个代理在运行,并且启用了 Zeroconf 发现,您可以使用 brokerURL 连接到代理
zeroconf:_activemq_development.
这将使用 Zeroconf 查找可用的代理,并且会随机选择一个代理,并且如果有多个代理在运行,则在断开连接时会自动故障转移。
LDAP 发现
ActiveMQ Classic 支持使用 LDAP 来发现代理。
有关更多详细信息,请参阅 LDAP 代理发现机制。
尝试发现
如果您在单独的 shell 中运行以下命令,您将拥有 2 个代理自动发现自身,以及 2 个使用固定 URL 的客户端
maven -o server -Dconfig=src/test/org/activemq/usecases/receiver-zeroconf.xml
maven -o server -Dconfig=src/test/org/activemq/usecases/sender-zeroconf.xml
maven -o consumer -Durl=tcp://127.0.0.1:62002
maven -o producer -Durl=tcp://127.0.0.1:62001
如果您希望客户端使用发现来查找代理,请运行上面两个“server”语句中的任何一个(或两者),然后按如下方式运行生产者/消费者
maven -o consumer -Durl=zeroconf:_activemq.broker.development.
maven -o producer -Durl=zeroconf:_activemq.broker.development.
传输 URL 的格式为
zeroconf:<serviceName>
其中 <serviceName>
是 Zeroconf 服务名称;它似乎以下划线 (_) 开头,并且必须以点 (.) 结尾。因此,我们可以使用此服务名称来区分开发、UAT 和生产代理 - 或者将它们分组到域等中。
发现和安全
在使用代理的自动发现时,攻击者可能能够伪装成合法代理,并通过这种方式捕获和/或操纵通过它的所有消息。
自动发现中是否包含安全设置来避免这种情况?