AMQP協議介紹

AMQP協議本身包括三層:

  • Module Layer:協議最高層,主要定義了一些供客戶端調用的命令,客戶端可以利用這些命令實現自己的業務邏輯。例如,客戶端可以使用Queue.Declare命令聲明一個隊列或者使用Basic.Consume訂閱消費一個隊列中的消息
  • Session Layer:中間層,主要負責將客戶端的命令發送給服務器,再將服務端的應答返回給客戶端,主要爲客戶端和服務端之間的通信提供可靠的同步機制和錯誤處理。
  • Transport Layer:最底層,主要傳輸二進制流,提供幀的處理、信道複用、錯誤檢測和數據表示等

AMQP生產者流轉過程

Connection connection = factory.newConnection();//創建連接
Channel channel = connection.createChannel();//創建信道
String message = "Hello World";
channel.basicPublish(EXCHANGE_NAME,ROUTING_KEY,MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());
channel.close();
connection.close();

在這裏插入圖片描述

AMQP消費者流轉過程

Connection connection = factory.newConnection(addresses);//創建連接
final Channel channel = Connection.createChannel();//創建信道
Consumer consumer = new DefaultConsumer(channel){} //...省略實現
channel.basicQos(64);
channel.basicConsume(QUEUE_NAME,consumer);
//等待回調函數執行完畢後,關閉資源
TimeUnit.SECONDS.sleep(5);
channel.close();
connection.close();

在這裏插入圖片描述
如果在消費之前調用了channel.basicQos(int prefetchCount) 的方法來設置消費者客戶端最大能保持的未確認的消息數,那麼協議流轉會涉及Basic.Qos/.Qos-Ok這兩個AMQP命令。
在真正消費之前,消費者客戶端需要向Broker發送Basic.Consume命令(即調用Basic.basicConsume方法)將channel設置爲接收模式,之後Broker回執Basic.Consume-Ok以告訴消費者客戶端準備好消費消息。緊接着Broker向消費者客戶端推送消息,即Basic.Deliver命令,和Basic.Publish命令一樣會攜帶Content Header 和Content Body。
消費者接收到消息並正確消費之後,向Broker發送確認,即Basic.Ack命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章