1,broker clusters
最常见的JMS分布式模型通常如下:
整个环境中包含很多JMS broker和JMS客户端,并且客户端会连接其中一个broker,如果客户端连接的broker恰好挂掉,客户端会尝试自动连接至另一个broker
在JMS客户端一般使用failover协议来实现这个功能。failover传输层重连接逻辑在其它传输层逻辑之上(因此相较于其它传输层逻辑,总是会优先触发),协议规范允许配置任意多个URI,failover传输层会随机选择配置URI中的一个并尝试建立连接,如果连接建立失败,或者之后的传输过程失败,会随机选择另一个URI建立连接,示例如下:
failover:(tcp://remotehost1:61616,tcp://remotehost2:61616)?initialReconnectDelay=100
客户端在建立连接时是随机选择URI,如果不想随机选择URI,需要显式设置randomize=false
2,networks of brokers
由于客户端在建立连接时使用failover协议,所以producer和consumer在初始化时建立连接所选的URI是随机的,这时就会出现下图中的问题
producer将消息发送给broker1,但是consumer初始化时连接的是broker2,broker1中并没