Advanced
Тема интерфейса

Accessing RabbitMQ on a Client (SSL Disabled)

This section takes the example of a demo of DMS for RabbitMQ to describe how to access a RabbitMQ instance with SSL disabled on a RabbitMQ client for message production and consumption.

Prerequisites

  • A RabbitMQ instance with SSL disabled has been created following the instructions in Buying a RabbitMQ Instance. The username and password entered in the instance creation have been obtained.
  • Instance Address (Private Network) or Instance Address (Public Network) has been recorded.
  • The network between the client server and the RabbitMQ instance has been established. For details about network requirements, see RabbitMQ Network Connection Requirements.
  • JDK v1.8.111 or later has been installed on the client server, and the JAVA_HOME and PATH environment variables have been configured as follows:

    Add the following lines to the .bash_profile file in the home directory as an authorized user. In this command, /opt/java/jdk1.8.0_151 is the JDK installation path. Change it to the path where you install JDK.

    export JAVA_HOME=/opt/java/jdk1.8.0_151
    export PATH=$JAVA_HOME/bin:$PATH

    Run the source .bash_profile command for the modification to take effect.

  • In the RabbitMQ instance: A virtual host, exchange, and queue have been created and an exchange-queue binding has been configured.

Accessing the Instance in CLI Mode

  1. Log in to the client server.
  2. Run the following command to download RabbitMQ-Tutorial.zip (code package of the sample project):

    wget https://dms-demo.obs.ru-moscow-1.hc.sbercloud.ru/RabbitMQ-Tutorial.zip

  3. Run the following command to decompress RabbitMQ-Tutorial.zip:

    unzip RabbitMQ-Tutorial.zip

  4. Run the following command to navigate to the RabbitMQ-Tutorial directory, which contains the precompiled JAR file:

    cd RabbitMQ-Tutorial

  5. Create messages using the sample project.

    java -cp .:rabbitmq-tutorial.jar Send {host} {port} {user} {password}

    Parameter description:

    Sample message production:

    [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.xx.40 5672 test Zxxxxxxs
    [x] Sent 'Hello World!'
    [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Send 192.168.xx.40 5672 test Zxxxxxxs
    [x] Sent 'Hello World!'

  6. Retrieve messages using the sample project.

    java -cp .:rabbitmq-tutorial.jar Recv {host} {port} {user} {password}

    Parameter description:

    Sample message consumption:

    [root@ecs-test RabbitMQ-Tutorial]# java -cp .:rabbitmq-tutorial.jar Recv 192.168.xx.40 5672 test Zxxxxxxs
    [*] Waiting for messages. To exit press CTRL+C
    [x] Received 'Hello World!'
    [x] Received 'Hello World!'

    To stop retrieving messages, press Ctrl+C to exit.

Java Sample Code

  • Accessing an instance and producing messages
    • VHOST_NAME: name of the virtual host that contains the queue for messages to be sent to
    • QUEUE_NAME: name of the queue for messages to be sent to
    • Hello World!: the message to be sent in this sample
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost(host);
    factory.setPort(port);
    factory.setVirtualHost("VHOST_NAME");
    factory.setUsername(user);
    factory.setPassword(password);
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();
    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    String message = "Hello World!";
    channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
    System.out.println(" [x] Sent '" + message + "'");
    channel.close();
    connection.close();
  • Accessing an instance and consuming messages
    • VHOST_NAME: name of the virtual host that contains the queue to consume messages
    • QUEUE_NAME: name of the queue to consume messages
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost(host);
    factory.setPort(port);
    factory.setVirtualHost("VHOST_NAME");
    factory.setUsername(user);
    factory.setPassword(password);
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();
    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
    Consumer consumer = new DefaultConsumer(channel)
    {
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
    byte[] body)
    throws IOException
    {
    String message = new String(body, "UTF-8");
    System.out.println(" [x] Received '" + message + "'");
    }
    };
    channel.basicConsume(QUEUE_NAME, true, consumer);