rabbitMQ基礎使用入門學習
阿新 • • 發佈:2021-10-28
我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);
}
}
執行生產者
發現管理頁面有一個佇列有未消費的訊息
執行消費者。訊息被消費