Usando o STOMP para Gerenciamento de Mensagens
Use o protocolo de mensagens STOMP para publicar, consumir e gerenciar mensagens em uma fila.
Visão Geral
O STOMP é um protocolo de mensagens aberto que pode aumentar a eficiência de produção e consumo, porque a autenticação é feita uma vez por conexão, em vez de uma vez por solicitação. O serviço Queue suporta as especificações STOMP 1.0, 1.1 e 1.2. É possível usar STOMP e REST para publicar e consumir na mesma fila.
Consulte as seguintes seções para obter detalhes sobre como o Queue suporta o STOMP:
- Conexão e Autenticação
- Enviar
- ASSINAR
- CANCELAR ASSINATURA
- CONFIRMAÇÃO/NACK
- MENSAGEM
- RECEBIMENTO
- DESCONECTAR
- ERRO
A fila não suporta cabeçalhos ou transações personalizadas (quadros do STOMP
BEGIN/COMMIT/ABORT
). O serviço Queue retornará um quadro ERROR
e fechará a conexão se BEGIN/COMMIT/ABORT
for usado.Conexão e Autenticação
Os clientes podem usar o quadro CONNECT
ou STOMP
para estabelecer conexão com o serviço Queue em seu ponto final de mensagens na porta 61613. Para obter instruções detalhadas sobre como localizar o ponto final de mensagens de uma fila, consulte Ponto Final de Mensagens.
A autenticação com o protocolo STOMP usa tokens de autenticação. Os tokens de autenticação devem ser codificados por base64. Você pode gerar tokens na página de detalhes do usuário da Console. Consulte Como Trabalhar com Tokens de Autenticação para obter mais informações.
Crie um grupo ou usuário dedicado e conceda a ele a permissão para gerenciar filas no compartimento ou tenancy apropriado. Em seguida, gere um token de autenticação para o usuário criado e use-o na configuração do cliente STOMP. Consulte Políticas de Fila e Exemplos de Política para obter detalhes sobre as permissões necessárias para o gerenciamento de filas.
SEND
Use o quadro SEND
para produzir mensagens. Você pode incluir os seguintes cabeçalhos no quadro SEND
:
-
destination
: (Obrigatório) O OCID (Oracle Cloud Identifier) da fila na qual as mensagens serão publicadas. Opcionalmente, você pode incluir um ID de canal para publicar no canal especificado. Por exemplo:<queue_OCID>/<channel_ID>
receipt
: (Opcional) Se o quadroSEND
contiver um cabeçalhoreceipt
, o serviço Queue enviará um quadroRECEIPT
para o cliente após uma publicação bem-sucedida ou um quadroERROR
em caso de erro.Observação
Se o cabeçalhoreceipt
estiver ausente, o serviço Queue não enviará um quadroRECEIPT
, mas ainda poderá enviar um quadroERROR
em caso de erro.
Não há suporte para o cabeçalho transaction
e quaisquer cabeçalhos personalizados. O serviço Queue enviará um quadro ERROR
e fechará a conexão se cabeçalhos sem suporte forem incluídos.
SUBSCRIBE
Use o quadro SUBSCRIBE
para consumir mensagens. O quadro SUBSCRIBE
é igual a uma solicitação GetMessages
de sondagem longa. Todas as mensagens recebidas no destino inscrito são entregues ao cliente como quadros MESSAGE
da fila. Você pode incluir os seguintes cabeçalhos no quadro SUBSCRIBE
:
-
destination
: (Obrigatório) O OCID (Oracle Cloud Identifier) da fila da qual as mensagens serão consumidas. Opcionalmente, você pode incluir um filtro de canal a ser consumido do canal ou canais especificados. Por exemplo:<queue_OCID>/<channel_ID_filter>
id
: (Obrigatório) Identifica a assinatura. O mesmo ID deve ser informado pelo cliente em um quadroUNSUBSCRIBE
para interromper o consumo de mensagens.ack
: (Obrigatório) Só há suporte para o valorclient-individual
. Isso significa que um quadroACK
só exclui a mensagem identificada no quadroACK
e não todas as mensagens entregues antes.visibility
: (Opcional) Por quanto tempo as mensagens consumidas só ficarão visíveis para o cliente que está fazendo a solicitação. Se o cabeçalho for omitido, o serviço Fila usará o timeout de visibilidade padrão da fila.
No caso de erro, o serviço Queue retornará um quadro ERROR
e fechará a conexão.
UNSUBSCRIBE
Use o quadro UNSUBSCRIBE
para impedir que o cliente STOMP recebam mensagens da fila. Inclua o seguinte cabeçalho no quadro:
id
: (Obrigatório) Identifica qual assinatura interromper. Esse ID foi usado no quadroSUBSCRIBE
correspondente.
ACK/NACK
Use o quadro ACK
para excluir uma mensagem após ela ter sido recebida e processada. Um quadro ACK
só exclui a mensagem identificada pelo cabeçalho id
.
Use o quadro NACK
para notificar o serviço Queue de que a mensagem não foi processada com sucesso. O uso do quadro NACK
atualiza a visibilidade da mensagem para torná-la imediatamente visível para outros consumidores.
Ambos os quadros aceitam o seguinte cabeçalho, dependendo da versão do protocolo:
id
: (Obrigatório para STOMP v1.2) O ID da mensagem a ser excluída ou atualizada.message-id
: (Obrigatório para STOMP v1.1 ou 1.0) O ID da mensagem a ser excluída ou atualizada.
MESSAGE
O quadro MESSAGE
transmite mensagens de assinaturas para o cliente STOMP. Um quadro MESSAGE
contém os seguintes cabeçalhos:
message-id
:- Para STOMP v1.2: Um identificador interno exclusivo da mensagem. Usado somente para fins de depuração.
- Para STOMP v1.1 e v1.0: O recebimento de mensagem a ser usado com os quadros
ACK
eNACK
.
subscription
: O ID usado no quadroSUBSCRIBE
.destination
: O OCID (Oracle Cloud Identifier) da fila que continha as mensagens e um ID de canal opcional a ser publicado em um canal especificado. Por exemplo:<queue_OCID>/<channel_ID>
ack
: Somente para STOMP v.1.2, o recebimento da mensagem.content-type
: O tipo de payload, neste caso,plain/text
.content-length
: O tamanho do payload ou da mensagem.expire-after
: O tempo de expiração da mensagem, como milissegundos desde a época.visible-after
: O tempo de visibilidade da mensagem, como milissegundos desde a época.delivery-count
: O número de vezes que essa mensagem foi entregueoci-message-id
: Um ID de mensagem interno.
Um quadro MESSAGE
contém o payload da mensagem como corpo do quadro.
RECEIPT
O serviço Queue envia um quadro RECEIPT
para o cliente STOMP depois que o serviço processa com sucesso um quadro SEND
que solicitou um recebimento. Um quadro RECEIPT
inclui um cabeçalho receipt-id
com um valor que corresponde ao cabeçalho de recebimento no quadro SEND
.
Um quadro RECEIPT
é uma confirmação de que o quadro do cliente correspondente foi processado pelo servidor. Como o STOMP é baseado em fluxo, o recebimento também é uma confirmação cumulativa de que todos os quadros anteriores foram recebidos pelo servidor. No entanto, esses quadros anteriores talvez ainda não estejam totalmente processados. Se o cliente se desconectar, os quadros recebidos anteriormente deverão continuar a ser processados pelo servidor.
DISCONNECT
Use o quadro DISCONNECT
para desconectar ou feche a conexão com o serviço Queue. Todas as assinaturas associadas à conexão são interrompidas. Você pode incluir o seguinte cabeçalho no quadro:
receipt
: (Opcional) O serviço Queue enviará um quadroRECEIPT
para o cliente STOMP depois que todos os quadros anteriores com um cabeçalhoreceipt
tiverem sido processados com sucesso. Use o cabeçalhoreceipt
para desconexões normais.
ERROR
O serviço Queue poderá enviar quadros ERROR
se algo der errado. Depois de enviar o quadro ERROR
, o serviço Queue fechará a conexão. O quadro ERROR
pode conter os seguintes cabeçalhos:
message
: Uma descrição curta do erro. O corpo contém informações mais detalhadas.receipt-id
: O valor do cabeçalhoreceipt
, se o quadro que causou o erro incluiu um cabeçalhoreceipt
.content-type
: O tipo de payload, se o corpo contiver mais detalhes de mensagem de erro.content-length
: O tamanho do payload ou os detalhes da mensagem de erro.
O corpo do quadro ERROR
contém informações detalhadas sobre o erro.