1. 程式人生 > 其它 >rabbitMQ基礎使用入門學習

rabbitMQ基礎使用入門學習

我rabbitmq安裝在aliyun伺服器上了,沒有本地安裝,如果本地安裝百度下,注意erlang和mq的版本要一致

docker映象安裝

獲取映象。

docker pull rabbitmq:management (management版本有管理介面)

檢視映象

docker search rabbitmq:management

執行映象(不設定密碼)

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

設定密碼:

docker run -d \ --name my-rabbitmq \ -p 5672:5672 -p 15672:15672 \ -v /data:/var/lib/rabbitmq \ --hostname my-rabbitmq-host \ -e RABBITMQ_DEFAULT_VHOST=my_vhost \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin \ --restart=always \ rabbitmq:management

引數說明:

-d:後臺執行容器
   -name:指定容器名
   -p:指定服務執行的埠(5672:應用訪問埠;15672:控制檯Web埠號)
   -v:對映目錄或檔案,啟動了一個數據卷容器,資料卷路徑為:/var/lib/rabbitmq,再將此資料卷對映到住宿主機的/data目錄
   --hostname:主機名(RabbitMQ的一個重要注意事項是它根據所謂的 “節點名稱” 儲存資料,預設為主機名)
   -e:指定環境變數;(RABBITMQ_DEFAULT_VHOST:預設虛擬機器名;RABBITMQ_DEFAULT_USER:預設的使用者名稱;RABBITMQ_DEFAULT_PASS:預設使用者名稱的密碼)
   --restart=always:當Docker重啟時,容器能自動啟動   
   rabbitmq:management:映象名

安裝完之後。 訪問host:15672
展示管理段頁面

寫程式碼:3個類。連線類。 生產者。 消費者

新增依賴

<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.1</version>
</dependency>
public class ConnectionUtil {

public static Connection getConnection() throws Exception {
//定義連線工廠
ConnectionFactory factory = new ConnectionFactory();
//設定服務地址
factory.setHost("host");//你自己的地址
//埠
factory.setPort(5672);
//設定賬號名/密碼/vhost
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
//建立連線
Connection connection = factory.newConnection();
return connection;
}
}

public class Send {
private final static String QUEUE_NAME = "simple_queue";

public static void main(String[] args) throws Exception{
//獲取連線
Connection connection = ConnectionUtil.getConnection();
//建立通道
Channel channel = connection.createChannel();
//生明佇列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//訊息內容
String message = "hello world";
//發訊息
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("send---------->"+message);

//關閉通道和連線
channel.close();
connection.close();

}


}


public class Recv {
private final static String QUEUE_NAME = "simple_queue";

public static void main(String[] args) throws Exception{
//獲取連線
Connection connection = ConnectionUtil.getConnection();
//建立通道
Channel channel = connection.createChannel();
//宣告佇列--
channel.queueDeclare(QUEUE_NAME, false, false, false, null);

//消費
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//交換機
String exchange = envelope.getExchange();
long deliveeryTag = envelope.getDeliveryTag();
//body 訊息題
String msg = new String(body,"utf-8");
System.out.println("received---------------->"+msg );

}
};

channel.basicConsume(QUEUE_NAME, true, consumer);

}
}

執行生產者
發現管理頁面有一個佇列有未消費的訊息

執行消費者。訊息被消費