Obtención de “amqp: error interno” al examinar los mensajes de la cola del bus de servicio de Azure utilizando AMQP, rhea y Node

Hice la misma pregunta hace unos días: No se pueden “Peek” mensajes de una cola de bus de servicio de Azure usando AMQP y Nodo . Vuelvo a hacer la misma pregunta pero con algunas diferencias (por lo tanto, no marque esta pregunta como un duplicado de la otra pregunta):

  • En la pregunta anterior, estaba usando la biblioteca nodeamqp10 sin embargo, en base a algunos comentarios en la página de Github para esta biblioteca, terminé usando rhea lugar de la biblioteca nodeamqp10 .
  • Con algo de ayuda del equipo de Azure Service Bus, progresé y ahora recibo un error de parte de Azure Service Bus que me indica que estoy en el camino correcto.

Aquí está el nuevo código que estoy usando:

 var client = require('rhea'); const keyName = 'MyCustomPolicy'; const sasKey = 'SAS Key' const serviceBusHost = 'account.servicebus.windows.net'; const queueName = '003'; client.on('connection_open', (context) => { context.connection.open_sender({ target: { address: `${queueName}/$management` } }); }); client.once('sendable', (context) => { console.log('messages can be sent now....'); var receiver = context.connection.open_receiver({ source: { address: `${queueName}/$management` }, autoaccept: false, target: { address: 'receiver-link' } }); receiver.once('receiver_open', (context) => { console.log('receiver is now open....'); }); receiver.once('message', (context) => { console.log('message received by receiver....'); console.log(context.message); }); var messageBody = { 'from-sequence-number': 1, 'message-count': 5 }; const msg = { application_properties: { operation: 'com.microsoft:peek-message' }, body: client.types.wrap_map(messageBody), reply_to: 'receiver-link' }; context.sender.send(msg); console.log('message sent....'); }); client.connect({ transport: 'tls', host: serviceBusHost, hostname: serviceBusHost, username: keyName, password: sasKey, port: 5671, reconnect_limit: 10 }); 

Ahora, cuando ejecuto este código, recibo 500 errores del Azure Service Bus:

 { "application_properties": { "statusCode":500, "errorCondition":"amqp:internal-error", "statusDescription":"The service was unable to process the request; please retry the operation. For more information on exception types and proper exception handling, please refer to http://go.microsoft.com/fwlink/?LinkId=761101 Reference:ab667ed6-1565-4728-97b7-6ae4a33468b9, TrackingId:538f93a1-2c07-4bc0-bf41-dc00d7ae963c_B13, SystemTracker:account-name:Queue:003, Timestamp:8/2/2018 7:43:52 AM", "com.microsoft:tracking-id":"538f93a1-2c07-4bc0-bf41-dc00d7ae963c_B13" } } 

Incluso revisé el enlace incluido en el mensaje de error ( http://go.microsoft.com/fwlink/?LinkId=761101 ) pero no se mencionan los errores relacionados con amqp en ese enlace.

Al igual que en la pregunta anterior, si uso la dirección solo como el nombre de la cola en lugar de queue-name/$management , puedo recibir los mensajes pero los mensajes están bloqueados y el número de entregas de mensajes aumenta. Además, está devolviendo todos los mensajes de la cola en lugar de solo 5 mensajes que solicito.

No estoy seguro de lo que estoy haciendo mal. ¿Alguien puede ayudar?

Con la ayuda del equipo de Azure Service Bus, pude encontrar una solución a este problema (de hecho, me dieron esta solución). Esencialmente, los elementos de messageBody deben codificarse correctamente utilizando los tipos AMQP.

El siguiente código funciona:

  var messageBody = { 'from-sequence-number': client.types.wrap_long(1), 'message-count': client.types.wrap_int(5) }; const msg = { application_properties: { operation: 'com.microsoft:peek-message' }, body: messageBody, reply_to: 'receiver-link' }; 
    Intereting Posts