版本 5 拓扑结构
使用 ActiveMQ Classic 5 > 版本 5 拓扑结构
ActiveMQ Classic 支持各种不同的部署拓扑结构,以及 协议 和线格式。下图显示了具有几种不同拓扑结构的经纪人联合网络。
选择哪种拓扑结构取决于您。现在我们将更详细地介绍其中的一些协议。
在 VM 中
在进行单元测试时,一个有用的选项是将 JMS 通信限制在单个 JVM 内。为此,请使用协议
vm://127.0.0.1
您可以将 VM 协议细分为不同的组 - 例如,如果您希望在同一个 JVM 中具有逻辑上不同的 JMS 网络,您可以使用不同的 URI 对网络进行分组。例如
vm://127.0.0.1/foo
这将确保不同的段不会互相干扰。虽然通常我们使用唯一的主题和队列目标,以便所有流量可以在同一个逻辑网络上和谐共存。
客户端-服务器
这可能是最有效、最快的解决方案,适用于需要从发布/订阅到基于队列的通信的各种通信选项的大量客户端。通常,客户端将使用协议(通常是 TCP 或 SSL,但也可以是 NIO 或其他协议)连接到消息经纪人。
我们可以跨经纪人负载均衡客户端,并提供经纪人故障转移,以便我们拥有一个具有 高可用性 (HA) 的逻辑经纪人集群。
例如
tcp://somehost:port
或者对于 SSL
ssl://somehost:port
您可以使用 发现 来查找可连接的经纪人,这使得无缝连接到经纪人集群更加容易。
嵌入式经纪人
这在逻辑上等效于客户端-服务器,但一些(或所有)客户端包含一个本地嵌入式经纪人。因此,客户端和服务器(经纪人)之间的通信都在同一个 JVM 中,因此不使用真正的网络 - 虽然经纪人可能与连接到它的其他经纪人或客户端进行通信。
这可以避免从生产者到经纪人再到消费者的额外跃点 - 这对于 RMI/RPC 样式的情况来说是一个很好的优化,您希望获得点对点网络的性能优势(减少延迟),但同时又具有灵活的消息传递结构的可扩展性。
嵌入式经纪人还可以简化部署选项,因为它少了一个需要运行的进程。
嵌入式经纪人的另一个用例是为每个服务提供存储和转发隔离 - 这样,远程经纪人可以正常失败,而不会影响具有嵌入式经纪人的服务。例如,整个网络可能会出现故障,但服务可以继续将消息发布到其嵌入式经纪人。
您可以找到如何 在此配置嵌入式经纪人
点对点
这允许创建没有服务器的基于对等的集群 - 只有客户端相互连接。
有几种方法可以实现点对点的 JMS 网络。一种简单的方法是使用多播传输进行通信;然后,同一个多播地址上的所有节点都将接收所有消息,本地嵌入式消息经纪人将把消息路由到必要的 MessageConsumers。
我们目前有 3 种多播协议选择
- 多播
- jgroups:使用 JGroups 库实现可靠的多播
- jrms:使用 Sun 的 JRMS 库实现可靠的多播
多播在开发中很棒,但通常您可能希望在生产中禁用此功能,并在特定机器上设置已知的服务器。通常,基于套接字的通信(使用 pointcast)更快,并且更适合重负荷 - 特别是在 Java 上,因此我们倾向于建议主要使用多播进行发现,并使用 TCP/SSL 进行重型消息传递。
通常,我们可以使用点对点拓扑结构作为引导来创建客户端和经纪人集群,然后将服务器自动部署到集群中,以形成真正的网格样式网络。
因此,您可以使用 发现 以及独立经纪人或嵌入式经纪人来获得基于对等的网络的效果。
JXTA
我们有一个 JXTA 传输,它将使用完整的 JXTA 堆栈来协商 NAT 并跨越防火墙等,以创建真正的基于对等的 JMS 网络。
jxta://hostname:port
目前,您需要运行一台服务器,每个人都通过 JXTA 连接到该服务器。我们还没有创建使用 JXTA 的纯对等网络。