AMQP

ActiveMQ Classic 支援 AMQP 1.0 協定,這是一個 OASIS 標準。

可用性

從 ActiveMQ Classic 版本 5.8 開始提供。

為 AMQP 啟用 ActiveMQ Classic Broker

若要在代理程式上啟用 AMQP 協定支援,請新增以下傳輸連接器設定,並在其 URI 中參照 amqp 協定。

<transportConnectors>
   <transportConnector name="amqp" uri="amqp://0.0.0.0:5672"/>
</transportConnectors>

它已在預設的 ActiveMQ Classic 伺服器設定中啟用。如需更多協助,請參閱執行代理程式

安全性

AMQP 實作完全支援 ActiveMQ Classic 安全性機制。這允許代理程式接受純文字 SASL 驗證。授權原則會在目的地被存取(讀取/寫入)時套用。

SSL

為了增加安全性,可以將 AMQP 設定為透過 SSL 執行,如下一節所述。

透過 NIO 啟用 AMQP

為了獲得更好的可擴展性(和效能),AMQP 協定應設定為使用 NIO,而不是預設的 TCP。若要使用 NIO,請使用傳輸協定 amqp+nio 而不是 amqp

範例

<transportConnector name="amqp+nio" uri="amqp+nio://127.0.0.1:5672"/>

此傳輸在底層使用 NIO 傳輸,通常會比標準連接器使用更少的執行緒。如果您想在單一代理程式中使用大量的佇列,此連接器會很有幫助

透過 SSL 啟用 AMQP

將 ActiveMQ Classic 設定為透過 SSL 連線使用 AMQP 非常容易。若要使用 SSL,請使用傳輸協定 amqp+ssl 而不是 amqp

範例

<transportConnector name="amqp+ssl" uri="amqp+ssl://127.0.0.1:5671"/>

如需在 ActiveMQ Classic 中使用 SSL 的更多詳細資訊,請參閱以下文章(如何使用 SSL)。

使用 AMQP 處理目的地

您應該在目的地位址加上 queue:// 前綴,以使用基於佇列的目的地,或者使用 topic:// 前綴,以使用基於主題的目的地。如果省略目的地前綴,則目的地類型預設為佇列。

預取大小和信用額度

當 AMQP 接收器連線到代理程式時,它會對應到 JMS 消費者。此 JMS 消費者必須設定適當的預取大小。如果用戶端未設定,代理程式將採用用戶端設定的信用額度或使用預設值 1000

範例:調整預設的 prefetch 大小

<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;transport.prefetch=10"/>

在這種情況下,用戶端偏好設定將被忽略,並使用已設定的值。

您也可以調整代理程式端的 amqp 接收器連結,以處理傳入訊息。它預設會使用 1000 則訊息的信用額度,但您可以使用 producerCredit 屬性覆寫此設定,例如:

<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;transport.producerCredit=10000"/>

對應到 JMS

有三種基本轉換策略可用於 AMQP,並與 JMS API 互通。

策略 描述
native 預設)將 AMQP 訊息的位元組包裝到 JMS BytesMessage 中,並將 AMQP 訊息的標頭對應到 JMS 訊息的標頭。
raw 將 AMQP 訊息的位元組包裝到 JMS BytesMessage 中。
jms 將 AMQP 訊息的標頭對應到 JMS 訊息標頭,並將 AMQP 訊息的主體對應到 JMS 主體。

transportConnector 上的 transformer 傳輸選項設定為所需的對應策略。例如,若要在有效負載層級與 JMS 互通,請將 transformer 選項設定為 jms

<transportConnector name="amqp" uri="amqp://127.0.0.1:5672?transport.transformer=jms"/>

AMQP 訊息標頭如何對應到 JMS 標頭

無論使用哪個轉換器,都會對應以下標頭

AMQP 訊息 JMS 訊息 注意事項
  JMS_AMQP_NATIVE 如果轉換器為 nativeraw,則將設定為 true,否則為 false
message-format JMS_AMQP_MESSAGE_FORMAT  

當轉換器為 nativejms 時,以下標頭對應適用

AMQP 訊息 JMS 訊息 注意事項
application-properties.JMSXGroupID JMSXGroupID  
application-properties.JMSXGroupSequence JMSXGroupSequence  
application-properties.JMSXUserID JMSXUserID  
application-properties.**name name  
delivery-annotations.**name JMS_AMQP_DA_**name  
footer.**name JMS_AMQP_FT_**name  
header.deliveryCount JMSXDeliveryCount  
header.durable JMSDeliveryMode 如果未設定,則為 javax.jms.Message.DEFAULT_DELIVERY_MODE
header.first-acquirer JMS_AMQP_FirstAcquirer  
header.priority JMSPriority 如果未設定,則為 javax.jms.Message.DEFAULT_PRIORITY
header.ttl JMSExpiration 如果未設定,則為 javax.jms.Message.DEFAULT_TIME_TO_LIVE
message-annotations.**name JMS_AMQP_MA_**name  
message-annotations.x-opt-jms-type JMSType  
message-annotations.x-opt-reply-type JMSReplyTo 的類型 以逗號分隔的 queuetopictemporary 清單。如果未設定,則預設為 queue
message-annotations.x-opt-to-type JMSDestination 的類型 以逗號分隔的 queuetopictemporary 清單。如果未設定,則預設為 queue
properties.content-encoding JMS_AMQP_ContentEncoding  
properties.content-type JMS_AMQP_ContentType  
properties.correlation-id JMSCorrelationID  
properties.creation-time JMSTimestamp  
properties.group-sequence JMSXGroupSequence  
properties.message-id JMSMessageID 如果未設定,則自動產生。
properties.reply-to JMSReplyTo JMSReplyTo 的名稱
properties.reply-to-group-id JMS_AMQP_ReplyToGroupID  
properties.subject JMS_AMQP_Subject  
properties.to JMSDestination JMSDestination 的名稱
properties.user-id JMSXUserID properties.user-id 會解碼為 UTF-8 字串。

AMQP 屬性值類型會轉換如下

AMQP 類型 Java 類型 注意事項
binary 字串 二進位值的十六進位編碼
bool 布林值  
byte 位元組  
double 雙精度浮點數  
float 浮點數  
int 整數  
long 長整數  
short 短整數  
symbol 字串  
ubyte ByteShort 如果:value > Byte.MAX_VALUE,則使用 Short
uint IntegerLong 如果:value > Integer.MAX_VALUE,則使用 Long
ulong 長整數  
ushort ShortInteger 如果:value > Short.MAX_VALUE,則使用 Integer

AMQP 訊息主體如何對應到 JMS 訊息

如果轉換器設定為 jms,則 JMS 訊息類型將取決於 AMQP 訊息的主體類型。

主體類型 JMS 訊息類型
AmqpSequence StreamMessage
AmqpValue ObjectMessage
AmqpValue,其中包含 null Message
AmqpValue,其中包含 String TextMessage
AmqpValue,其中包含 binary BytesMessage
AmqpValue,其中包含 list StreamMessage
Data BytesMessage
null Message

AMQP 1.0 用戶端程式庫

您可以使用 Apache Qpid Proton

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 The Apache Software Foundation 的商標。版權所有 © 2024,The Apache Software Foundation。授權條款為 Apache License 2.0