Esporta (0) Stampa
Espandi tutto

Utilizzo di Service Bus da PHP con AMQP 1.0

Aggiornamento: gennaio 2014

Proton-PHP è un binding di linguaggio PHP per Proton-C. In altri termini, Proton-PHP viene implementato come wrapper attorno a un motore implementato in C.

Proton-C e i binding associati (incluso PHP) sono disponibili per il download qui. Il download è in formato codice sorgente. Per generare il codice, seguire le istruzioni contenute nel pacchetto scaricato.

ImportantImportante
Al momento della stesura di questo documento, il supporto SSL in Proton-C è disponibile solo per sistemi operativi Linux. Poiché in Service Bus di Microsoft Azure è necessario l'utilizzo di SSL, attualmente è possibile utilizzare Proton-C (e i binding di linguaggio) solo per eseguire l'accesso a Service Bus di Microsoft Azure da Linux. L'abilitazione di Proton-C per l'utilizzo con SSL in Windows è in fase di realizzazione. Verificare periodicamente la presenza di aggiornamenti.

Il codice che segue mostra come inviare e ricevere messaggi da un'entità di messaggistica di Service Bus.

Nel codice riportato di seguito viene illustrato come inviare un messaggio a un'entità di messaggistica di Service Bus.

$messenger = new Messenger();
$message = new Message();
$message->address = "amqps://[username]:[password]@[namespace].servicebus.windows.net/[entity]";

$message->body = "This is a text string";
$messenger->put($message);
$messenger->send();

Nel codice riportato di seguito viene illustrato come ricevere un messaggio da un'entità di messaggistica di Service Bus.

$messenger = new Messenger();
$address = "amqps://[username]:[password]@[namespace].servicebus.windows.net/[entity]";
$messenger->subscribe($address);

$messenger->start();
$messenger->recv(1);

if($messenger->incoming())
{
   $message = new Message();
   $messenger->get($message);      
}

$messenger->stop();

I messaggi Proton-PHP supportano i seguenti tipi di proprietà dell'applicazione: integer, double, Boolean, string e object. Il codice PHP che segue mostra come impostare le proprietà in un messaggio utilizzando ognuno di questi tipi di proprietà.

$message->properties["TestInt"] = 1;    
$message->properties["TestDouble"] = 1.5;      
$message->properties["TestBoolean"] = False;
$message->properties["TestString"] = "Service Bus";    
$message->properties["TestObject"] = new UUID("1234123412341234");   

Nell'API .NET di Service Bus le proprietà dell'applicazione dei messaggi vengono trasportate nella raccolta Properties di BrokeredMessage. Il codice che segue mostra come leggere le proprietà applicazione di un messaggio ricevuto da un client PHP.

if (message.Properties.Keys.Count > 0)
{
  foreach (string name in message.Properties.Keys)
  {
    Object value = message.Properties[name];
    Console.WriteLine(name + ": " + value + " (" + value.GetType() + ")" );
  }
  Console.WriteLine();
}if (message.Properties.Keys.Count > 0)
{
foreach (string name in message.Properties.Keys)
{
  Object value = message.Properties[name];
  Console.WriteLine(name + ": " + value + " (" + value.GetType() + ")" );
}
Console.WriteLine();
}

Nella tabella seguente sono indicati i mapping tra i tipi di proprietà PHP e i tipi di proprietà .NET.

 

Tipo di proprietà PHP Tipo di proprietà .NET

integer

int

double

double

boolean

bool

string

string

oggetto

Oggetto

Il tipo BrokeredMessage supporta proprietà dell'applicazione dei seguenti tipi: byte, sbyte, char, short, ushort, int, uint, long, ulong, float, double, decimal, bool, Guid, string, Uri, DateTime, DateTimeOffset e TimeSpan. Nel codice .NET riportato di seguito viene illustrato come impostare le proprietà per un oggetto BrokeredMessage utilizzando ognuno di questi tipi di proprietà.

message.Properties["TestByte"] = (byte)128;
message.Properties["TestSbyte"] = (sbyte)-22;
message.Properties["TestChar"] = (char) 'X';
message.Properties["TestShort"] = (short)-12345;
message.Properties["TestUshort"] = (ushort)12345;
message.Properties["TestInt"] = (int)-100;
message.Properties["TestUint"] = (uint)100;
message.Properties["TestLong"] = (long)-12345;
message.Properties["TestUlong"] = (ulong)12345;
message.Properties["TestFloat"] = (float)3.14159;
message.Properties["TestDouble"] = (double)3.14159;
message.Properties["TestDecimal"] = (decimal)3.14159;
message.Properties["TestBoolean"] = true;
message.Properties["TestGuid"] = Guid.NewGuid();
message.Properties["TestString"] = "Service Bus";
message.Properties["TestUri"] = new Uri("http://www.bing.com");
message.Properties["TestDateTime"] = DateTime.Now;
message.Properties["TestDateTimeOffSet"] = DateTimeOffset.Now;
message.Properties["TestTimeSpan"] = TimeSpan.FromMinutes(60);

Il codice PHP che segue mostra come leggere le proprietà applicazione di un messaggio ricevuto da un client Service Bus .NET.

if ($message->properties != null)
{
  foreach($message->properties as $key => $value)
  {
    printf("-- %s : %s (%s) \n", $key, $value, gettype($value));                       
  }         
}

Nella tabella seguente sono indicati i mapping tra i tipi di proprietà .NET e i tipi di proprietà PHP.

 

.NET JMS PHP JMS Note

byte

integer

sbyte

integer

char

Char

Classe Proton-PHP

short

integer

ushort

integer

int

integer

uint

Intero

long

integer

ulong

integer

virgola mobile

double

double

double

decimal

string

Decimal non è attualmente supportato con Proton.

bool

boolean

Guid

UUID

Classe Proton-PHP

string

string

DateTime

integer

DateTimeOffset

DescribedType

Mapping di DateTimeOffset.UtcTicks al tipo AMQP:

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

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

</type>

TimeSpan

DescribedType

Mapping di Timespan.Ticks al tipo AMQP:

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

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

</type>

Uri

DescribedType

Mapping di Uri.AbsoluteUri al tipo AMQP:

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

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

</type>

Nella tabella seguente sono indicati i mapping tra le proprietà messaggio standard Proton-PHP e le proprietà messaggio standard BrokeredMessage.

 

Proton-PHP .NET di Service Bus Note

Durable

n/d

Service Bus supporta solo messaggi durevoli.

Priority

n/d

Service Bus supporta solo una singola priorità dei messaggi.

Ttl

Message.TimeToLive

Conversione, il valore TTL di Proton-PHP è espresso in millisecondi.

first_acquirer

delivery_count

Id

Message.Id

user_id

Indirizzo

Message.To

Oggetto

Message.Label

reply_to

Message.ReplyTo

correlation_id

Message.CorrelationId

content_type

Message.ContentType

content_encoding

n/d

expiry_time

Message.ExpiresAtUTC

creation_time

n/d

group_id

Message.SessionId

group_sequence

reply_to_group_id

Message.ReplyToSessionId

Formato

n/d

 

.NET di Service Bus Proton-PHP Note

ContentType

Message->content_type

CorrelationId

Message->correlation_id

EnqueuedTimeUtc

Message->annotations[x-opt-enqueued-time]

Label

Message->subject

MessageId

Message->id

ReplyTo

Message->reply_to

ReplyToSessionId

Message->reply_to_group_id

ScheduledEnqueueTimeUtc

Message->annotations [“x-opt-scheduled-enqueue-time”]

SessionId

Message->group_id

TimeToLive

Message->ttl

Conversione, il valore TTL di Proton-PHP è espresso in millisecondi.

To

Message->address

Mostra:
© 2015 Microsoft