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
- Log in to the client server.
- 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
- Run the following command to decompress RabbitMQ-Tutorial-SSL.zip:
unzip RabbitMQ-Tutorial-SSL.zip
- Run the following command to navigate to the RabbitMQ-Tutorial-SSL directory, which contains the precompiled JAR file:
cd RabbitMQ-Tutorial-SSL
- 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
- 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);
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.