客户端连接

有多种连接方法供业务应用程序访问 RabbitMQ 实例。本节描述了如何使用 JavaPython 访问 RabbitMQ 实例。

适用场景

访问方式适用场景
集群内访问集群内的应用程序通过 SVC 暴露的端口访问 RabbitMQ 实例。
集群外访问集群外的应用程序通过 NodePort 的端口访问 RabbitMQ 实例。
通过适当的实例端口访问管理门户。

连接到 RabbitMQ

先决条件

  1. 请参考 访问方法 获取具体的访问地址。
  2. 请参考 用户管理 获取实例的用户名和密码。
提示

确保在代码中将 <username><password> 替换为实例的实际账户信息。

确保在代码中将 <ip><port> 替换为实例的实际访问地址。如果是从集群外访问,可能会有多个访问地址;可以全部填写以增强连接的可靠性。

Java
Python

Java 访问示例如下:

import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
import java.util.HashMap;
import java.util.UUID;

public class ProducerTest {
    public static void main(String[] args) throws Exception {
        Address[] addresses = {
            new Address(<ip 1>,<port 1>),
            new Address(<ip 2>,<port 2>),
            new Address(<ip 3>,<port 3>)
        };
        String username = "<username>";
        String password = "<password>";
        String vhostName = "/";
        String exchangeName = "testExchange";
        String exchangeType = "direct";
        String queueName = "test";

        ConnectionFactory factory = new ConnectionFactory();

        factory.setUsername(username);

        factory.setPassword(password);

        factory.setAutomaticRecoveryEnabled(true);
        factory.setNetworkRecoveryInterval(5000);

        factory.setVirtualHost(vhostName);

        factory.setConnectionTimeout(30 * 1000);
        factory.setHandshakeTimeout(30 * 1000);
        factory.setShutdownTimeout(0);

        Connection connection = factory.newConnection(addresses);
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(exchangeName, exchangeType, true, false, false, null);
        channel.queueDeclare(queueName, true, false, false, new HashMap<String, Object>());
        channel.queueBind(queueName, exchangeName, "BindingKeyTest");

        for (int i = 0; i < 100; i++  ) {
                String message = "Hello World!"+ i;
                channel.basicPublish(exchangeName, "BindingKeyTest", MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
                System.out.println(" [x] Sent '" + message + "'");
        }
        channel.close();
        connection.close();
    }
}

有关更多 Java 客户端的示例,请参考 Java 客户端 API 指南

有关其他客户端的使用,请参考 RabbitMQ 教程