匯出 (0) 列印
全部展開

將來自 .NET 的服務匯流排與 AMQP 1.0 搭配使用

下載 Service Bus SDK

AMQP 1.0 支援可在 服務匯流排 SDK 版本 2.1 或更新版中找到。您可以在 http://nuget.org/packages/WindowsAzure.ServiceBus/ 從 NuGet 下載最新的 SDK。

設定 .NET 應用程式以使用 AMQP 1.0

根據預設,服務匯流排 .NET 用戶端程式庫會使用以 SOAP 為基礎的專用通訊協定來與 服務匯流排 服務通訊。若要使用 AMQP 1.0 而不使用預設的通訊協定,需要在 服務匯流排 連線字串上進行明確的設定 (會於下個章節說明)。除了此變更以外,在使用 AMQP 1.0 時應用程式程式碼基本上會維持不變。

在目前版本中 有一些使用 AMQP 不支援的 API 功能。稍後會在<不支援的功能與限制>一節中說明這些不支援的功能。在使用 AMQP 時,部分進階組態設定也會採用不同的含意。

使用 App.config 進行設定

對於使用 App.config 設定檔來儲存設定的應用程式而言,此為理想做法。針對 服務匯流排 應用程式,您可以使用 App.config 來儲存適用於 服務匯流排 ConnectionString 值的設定。以下為 App.config 檔案範例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="Microsoft.ServiceBus.ConnectionString"
             value="Endpoint=sb://[namespace].servicebus.windows.net;SharedSecretIssuer=[issuer name];SharedSecretValue=[issuer key];TransportType=Amqp" />
    </appSettings>
</configuration>

Microsoft.ServiceBus.ConnectionString 設定的值為 服務匯流排 連線字串,可以用來設定與 服務匯流排 的連線。格式如下所示:

Endpoint=sb://[namespace].servicebus.windows.net;SharedSecretIssuer=[issuer name];SharedSecretValue=[issuer key];TransportType=Amqp

其中 [namespace][issuer name][issuer key] 都是從 Windows Azure 管理入口網站所取得。如需詳細資訊,請參閱如何使用服務匯流排佇列

使用 AMQP 時,請使用 ;TransportType=Amqp 來附加連線字串。這個表示法會通知用戶端程式庫,使用 AMQP 1.0 來建立其與 服務匯流排 的連線。

訊息序列化

使用預設通訊協定時,.NET 用戶端程式庫的預設序列化行為是使用 DataContractSerializer 類型來序列化 BrokeredMessage 執行個體,以便在用戶端程式庫與 服務匯流排 服務之間進行傳輸。使用 AMQP 傳輸模式時,用戶端程式庫會使用 AMQP 類型系統,將 BrokeredMessage 序列化至 AMQP 訊息中。此序列化讓接收應用程式能夠接收和解譯訊息,而該應用程式可能是在不同平台上執行,例如,使用 JMS API 來存取 服務匯流排 的 Java 應用程式。

當您建構 BrokeredMessage 執行個體時,可以提供 .NET 物件做為建構函式的參數,以提供來做為訊息的內文。針對可對應至 AMQP 基本類型的物件,可將內文序列化至 AMQP 資料類型。如果物件無法直接對應至 AMQP 基本類型;也就是應用程式定義的自訂類型,則可使用 DataContractSerializer 將物件序列化,並在 AMQP 資料訊息中傳送序列化的位元組。

為了促進與非 .NET 用戶端的交互操作性,只能使用可直接序列化至 AMQP 類型以供訊息內文使用的 .NET 類型。下表詳述這些類型及對應至 AMQP 類型系統的對應。

 

.NET 內文物件類型 對應的 AMQP 類型 AMQP 內文區段類型

bool

boolean

AMQP 值

byte

ubyte

AMQP 值

ushort

ushort

AMQP 值

uint

uint

AMQP 值

ulong

ulong

AMQP 值

sbyte

byte

AMQP 值

short

short

AMQP 值

int

int

AMQP 值

long

long

AMQP 值

float

float

AMQP 值

double

double

AMQP 值

decimal

decimal128

AMQP 值

char

char

AMQP 值

日期時間

timestamp

AMQP 值

Guid

uuid

AMQP 值

byte[]

binary

AMQP 值

字串

字串

AMQP 值

System.Collections.IList

list

AMQP 值

集合中所含的項目只有此表格中定義的項目。

System.Array

array

AMQP 值

集合中所含的項目只有此表格中定義的項目。

System.Collections.IDictionary

對應

AMQP 值

集合中所含的項目只有此表格中定義的項目。

注意:僅支援字串金鑰。

Uri

描述的字串

(請參閱下表)

AMQP 值

DateTimeOffset

描述的 long

(請參閱下表)

AMQP 值

TimeSpan

描述的 long

(請參閱下表)

AMQP 值

Stream

binary

AMQP 資料 (可能有多個)

資料區段包含讀取自 Stream 物件的原始位元組。

其他物件

binary

AMQP 資料 (可能有多個)

包含物件的序列化 binary,此物件會使用 DataContractSerializer 或應用程式所提供的序列化程式。

 

.NET 類型 對應的 AMQP 描述類型 附註

Uri

<type name=”uri” class=restricted source=”string”>

<descriptor name=”com.microsoft:uri” />

</type>

Uri.AbsoluteUri

DateTimeOffset

<type name=”datetime-offset” class=restricted source=”long”>

<descriptor name=”com.microsoft:datetime-offset” />

</type>

DateTimeOffset.UtcTicks

TimeSpan

<type name=”timespan” class=restricted source=”long”>

<descriptor name=”com.microsoft:timespan” />

</type>

TimeSpan.Ticks

不支援的功能、限制及行為差異

使用 AMQP 時,不支援以下 服務匯流排 .NET API 的功能:

  • 交易。

  • 透過傳送目的地傳送。

  • 依照訊息序號進行接收。

  • 訊息和工作階段瀏覽。

  • 工作階段狀態。

  • 以批次為基礎的 API。

  • 向外擴充接收規模。

  • 訂閱規則的執行階段操控。

  • 工作階段鎖定更新。

要特別說明的是,使用 AMQP 時目前不支援下列 API:

相較於預設通訊協定,使用 AMQP 時,服務匯流排 .NET API 的行為中還是有一些小差異:

  • 會忽略 OperationTimeout 屬性。

  • MessageReceiver.Receive(TimeSpan.Zero) 會實作為 MessageReceiver.Receive(TimeSpan.FromSeconds(10))

控制 AMQP 通訊協定設定

.NET API 會公開數個設定來控制 AMQP 通訊協定的行為:

  • MessageReceiver.PrefetchCount:控制套用至連結的初始信用額度。預設值為 0。

  • MessagingFactorySettings.AmqpTransportSettings.MaxFrameSize:控制在連線開啟時間之交涉期間提供的 AMQP 框架大小上限。預設值為 65,536 個位元組。

  • MessagingFactorySettings.AmqpTransportSettings.BatchFlushInterval:如果傳輸可以批次進行,則此值會決定用於傳送處置的延遲上限。預設是由傳送者/接收者所繼承。個別的傳送者/接收者可以覆寫預設值 (20 毫秒)。

  • MessagingFactorySettings.AmqpTransportSettings.UseSslStreamSecurity:控制是否要透過 SSL 連線來建立 AMQP 連線。預設值為 true

社群新增項目

新增
顯示:
© 2014 Microsoft