創建實例時開啟SASL_SSL訪問,則數據加密傳輸,安全性更高。
DMS的RabbitMQ實例兼容開源協議,請參考RabbitMQ官網提供的不同語言的連接和使用向導:。
本節以DMS提供的demo為例,介紹VPC內訪問與使用RabbitMQ的方法,假設RabbitMQ客戶端部署在彈性云主機上。
前提條件
- 參考創建RabbitMQ實例章節創建RabbitMQ示例,并記錄創建時輸入的用戶名和密碼。
- 創建完成后,單擊實例名稱,查看并記錄實例詳情中的“連接地址”。
- 已創建彈性云主機,并且彈性云主機的VPC、子網、安全組與RabbitMQ實例的VPC、子網、安全組保持一致。
- 已完成JDK安裝及環境變量配置,具體操作請參考準備環境。
命令行模式連接實例
以下操作命令以Linux系統為例進行說明。
1、下載RabbitMQ-Tutorial-SSL.zip示例工程代碼。
2、解壓RabbitMQ-Tutorial-SSL.zip壓縮包。
$ unzip RabbitMQ-Tutorial-SSL.zip
3、進入RabbitMQ-Tutorial-SSL目錄,該目錄下包含預編譯好的jar文件。
$ cd RabbitMQ-Tutorial-SSL
4、運行生產消息示例。
$ java -cp .:rabbitmq-tutorial-sll.jar Send host port user password
其中,host表示RabbitMQ實例的連接地址,port為RabbitMQ實例的監聽端口(默認為5671),user表示RabbitMQ用戶名,password表示用戶名對應的密碼。
圖1 生產消息示例

使用Ctrl+C命令退出。
5、運行消費消息示例。
$ java -cp .:rabbitmq-tutorial-sll.jar Recv host port user password
其中,host表示RabbitMQ實例的連接地址,port為RabbitMQ實例的監聽端口(默認為5671),user表示RabbitMQ用戶名,password表示用戶名對應的密碼。
圖2 消費消息示例

如需停止消費使用Ctrl+C命令退出。
示例代碼(Java)
連接實例并生產消息
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
factory.setPort(port);
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();
連接實例并消費消息
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
factory.setPort(port);
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);