Exportar (0) Imprimir
Expandir todo

Uso del Service Bus desde .NET con AMQP 1.0

Descargar el SDK de Service Bus

La compatibilidad con AMQP 1.0 está disponible en el SDK de Service Bus versión 2.1 o posterior. Puede descargar el SDK más reciente de NuGet en http://nuget.org/packages/WindowsAzure.ServiceBus/.

Configuración de aplicaciones .NET para el uso de AMQP 1.0

De manera predeterminada, la biblioteca del cliente Service Bus .NET se comunica con el servicio Service Bus mediante un protocolo dedicado basado en SOAP. Para usar AMQP 1.0 en lugar del protocolo predeterminado, se necesita una configuración explícita en la cadena de conexión de Service Bus según se describe en la sección siguiente. Más allá de este cambio, el código de aplicación sigue siendo básicamente el mismo cuando se usa AMQP 1.0.

En la versión actual, hay algunas características de API que no se admiten al usar AMQP. Estas características incompatibles se indican más adelante, en la sección "Características incompatibles y restricciones". Algunas de las opciones de configuración avanzadas también tienen un significado distinto cuando se usa AMQP.

Configuración mediante App.config

Se recomienda que las aplicaciones utilicen el archivo de configuración App.config para almacenar la configuración. Para las aplicaciones del Service Bus, se puede utilizar el archivo App.config para guardar la configuración del valor Service Bus ConnectionString. El siguiente es un ejemplo de archivo 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>

El valor del parámetro Microsoft.ServiceBus.ConnectionString es la cadena de conexión del Service Bus que se utiliza para configurar la conexión al Service Bus. El formato es el siguiente:

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

Donde [namespace], [issuer name] y [issuer key] se obtienen del Portal de administración de Windows Azure. Para obtener más información, consulte Cómo usar las colas del Service Bus.

Si utiliza AMQP, anexe la cadena de conexión con ;TransportType=Amqp. Esta notación informa a la biblioteca de cliente que establezca la conexión al Service Bus mediante AMQP 1.0.

Serialización de mensajes

Si utiliza el protocolo predeterminado, el comportamiento de serialización predeterminado de la biblioteca de cliente de .NET consiste en utilizar el tipo DataContractSerializer para serializar una instancia BrokeredMessage para el transporte entre la biblioteca de cliente y el Service Bus Service. Si utiliza el modo de transporte de AMQP, la biblioteca de cliente utiliza el sistema de tipos de AMQP para la serialización de BrokeredMessage en un mensaje de AMQP. Esta serialización habilita el mensaje para que lo reciba e interprete una aplicación receptora que se ejecute potencialmente en otra plataforma como, por ejemplo, una aplicación Java que utilice la API de JMS para acceder al Service Bus.

Al construir una instancia BrokeredMessage, se puede proporcionar un objeto .NET como un parámetro para el constructor que sirva de cuerpo del mensaje. Para los objetos que se pueden asignar a tipos de AMQP primitivos, el cuerpo se serializa en los tipos de datos de AMQP. Si el objeto no se puede asignar directamente a un tipo de AMQP primitivo (es decir, un tipo personalizado definido por la aplicación), el objeto se serializa mediante DataContractSerializer y los bytes serializados se envían en un mensaje de datos de AMQP.

Para facilitar la interoperabilidad con clientes que no son de .NET, utilice solo tipos de .NET que se puedan serializar directamente en tipos de AMQP del cuerpo del mensaje. En la tabla siguiente, se detallan estos tipos y la asignación correspondiente al sistema de tipos de AMQP.

 

Tipo de objeto de cuerpo de .NET Tipo de AMQP asignado Tipo de sección de cuerpo de AMQP

bool

boolean

Valor de AMQP

byte

ubyte

Valor de AMQP

ushort

ushort

Valor de AMQP

uint

uint

Valor de AMQP

ulong

ulong

Valor de AMQP

sbyte

byte

Valor de AMQP

short

short

Valor de AMQP

int

int

Valor de AMQP

largo

largo

Valor de AMQP

float

float

Valor de AMQP

double

double

Valor de AMQP

decimal

decimal128

Valor de AMQP

char

char

Valor de AMQP

DateTime

timestamp

Valor de AMQP

GUID

uuid

Valor de AMQP

byte[]

binary

Valor de AMQP

string

string

Valor de AMQP

System.Collections.IList

list

Valor de AMQP

Los elementos incluidos en la colección solo pueden ser los que se definen en esta tabla.

System.Array

array

Valor de AMQP

Los elementos incluidos en la colección solo pueden ser los que se definen en esta tabla.

System.Collections.IDictionary

asignación

Valor de AMQP

Los elementos incluidos en la colección solo pueden ser los que se definen en esta tabla.

Nota: solo son compatibles las claves de cadena.

Uri

Cadena descrita

(consulte la tabla siguiente)

Valor de AMQP

DateTimeOffset

Longitud descrita

(consulte la tabla siguiente)

Valor de AMQP

TimeSpan

Longitud descrita

(consulte la tabla siguiente)

Valor de AMQP

Transmitir por secuencias

binary

Datos de AMQP (pueden ser múltiples)

Las secciones de datos contiene los bytes sin formato leídos del objeto de transmisión por secuencias.

Otro objeto

binary

Datos de AMQP (pueden ser múltiples)

Contiene el binario serializado del objeto que utiliza DataContractSerializer o un serializador suministrado por la aplicación.

 

Tipo .NET Tipo descrito de AMQP asignado Notas

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

Características, restricciones y diferencias de comportamiento no compatibles

Las características siguientes de la API Service Bus .NET no son compatibles cuando se usa AMQP:

  • Transacciones.

  • Enviar a través de destino de transferencia.

  • Recibir por número de secuencia de mensaje.

  • Exploración de mensajes y sesiones.

  • Estado de sesión.

  • API basadas en lotes.

  • Recepción escalada.

  • Manipulación en tiempo de ejecución de las reglas de suscripción.

  • Renovación de bloqueo de sesión.

Específicamente, las API siguientes no se admiten al usar AMQP:

También hay algunas pequeñas diferencias en el comportamiento de la API Service Bus .NET al usar AMQP, en comparación con el protocolo predeterminado:

  • La propiedad OperationTimeout se ignora.

  • MessageReceiver.Receive(TimeSpan.Zero) se implementa como MessageReceiver.Receive(TimeSpan.FromSeconds(10)).

Control de la configuración del protocolo AMQP

Las API de .NET exponen varios parámetros de configuración para controlar el comportamiento del protocolo AMQP:

  • MessageReceiver.PrefetchCount: controla el crédito inicial que se aplica a un vínculo. El valor predeterminado es 0.

  • MessagingFactorySettings.AmqpTransportSettings.MaxFrameSize: controla el tamaño de trama máximo de AMQP ofrecido durante la negociación en el momento de establecer la conexión. El valor predeterminado es de 65.536 bytes.

  • MessagingFactorySettings.AmqpTransportSettings.BatchFlushInterval: si se transfiere este valor como definible por lotes, determina el retraso máximo para el envío de disposiciones. Heredado por remitentes/receptores de forma predeterminada. El remitente/receptor individual puede invalidar el valor predeterminado de 20 milisegundos.

  • MessagingFactorySettings.AmqpTransportSettings.UseSslStreamSecurity: controla si las conexiones de AMQP se establecen a través de una conexión SSL. El valor predeterminado es true.

Adiciones de comunidad

Mostrar:
© 2014 Microsoft