Updated on 2024-10-25 GMT+08:00

Accessing RabbitMQ on a Client (SSL Enabled)

This section takes the example of a demo of DMS for RabbitMQ to describe how to access a RabbitMQ instance with SSL enabled on a RabbitMQ client for message production and consumption. If SSL is enabled, data will be encrypted before transmission for enhanced security.

Prerequisites

  • A RabbitMQ instance with SSL enabled 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-SSL.zip (code package of the sample project):

    wget https://dms-demo.obs.cn-north-1.myhuaweicloud.com/RabbitMQ-Tutorial-SSL.zip

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

    unzip RabbitMQ-Tutorial-SSL.zip

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

    cd RabbitMQ-Tutorial-SSL

  5. Produce messages using the sample project.

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

    Parameter description:

    • {host}: connection address obtained in Prerequisites
    • {port}: port of the RabbitMQ instance. Enter 5671.
    • {user}: username obtained in Prerequisites
    • {password}: password obtained in Prerequisites
    Figure 1 Sample project for message creation

  6. Consume messages using the sample project.

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

    Parameter description:

    • {host}: connection address obtained in Prerequisites
    • {port}: port of the RabbitMQ instance. Enter 5671.
    • {user}: username obtained in Prerequisites
    • {password}: password obtained in Prerequisites
    Figure 2 Sample project for message retrieval

    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);
     factory.useSslProtocol();
     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);
     factory.useSslProtocol();
     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);