是的,ActiveMQ Artemis是支持主-主故障切换的。
以下是一个使用ActiveMQ Artemis的Java代码示例:
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.core.client.*;
import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
import org.apache.activemq.artemis.api.core.client.ClientConsumer;
import org.apache.activemq.artemis.api.core.client.ClientMessage;
import java.util.HashMap;
import java.util.Map;
public class FailoverExample {
public static void main(String[] args) throws Exception {
// 创建一组ActiveMQ Artemis服务器的连接配置
Map connectionParams = new HashMap<>();
connectionParams.put("host", "localhost");
connectionParams.put("port", 61616);
TransportConfiguration transportConfiguration = new TransportConfiguration(
"org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory",
connectionParams
);
// 创建ActiveMQ Artemis的连接工厂
ServerLocator serverLocator = ActiveMQClient.createServerLocatorWithoutHA(transportConfiguration);
// 设置连接工厂的故障切换策略为主-主
serverLocator.setFailoverOnInitialConnection(true);
serverLocator.setFailoverOnServerShutdown(true);
// 创建连接
ClientSessionFactory sessionFactory = serverLocator.createSessionFactory();
ClientSession session = sessionFactory.createSession();
// 创建一个消费者并接收消息
ClientConsumer consumer = session.createConsumer("myQueue");
session.start();
while (true) {
ClientMessage message = consumer.receive();
System.out.println("Received message: " + message.getBodyBuffer().readString());
}
// 关闭连接
session.close();
serverLocator.close();
}
}
在上面的示例中,我们创建了一个ActiveMQ Artemis服务器连接配置,并使用连接配置创建了一个连接工厂。然后,我们设置了连接工厂的故障切换策略为主-主。接下来,我们创建了一个连接和一个消费者,并开始接收消息。最后,我们关闭了连接和连接工厂。
通过设置故障切换策略为主-主,当一个服务器失效时,客户端会自动切换到另一个可用的服务器,以确保消息的可靠传递。