Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo demonstra como usar o Spring Cloud Stream Binder para enviar mensagens e receber mensagens de Service Bus queues e topics.
Azure fornece uma plataforma de mensagens assíncronas chamada Azure Service Bus ("Service Bus") baseada no padrão Advanced Message Queueing Protocol 1.0 ("AMQP 1.0"). O Service Bus pode ser utilizado em toda a gama de plataformas Azure suportadas.
Pré-requisitos
Uma subscrição do Azure - crie uma gratuitamente.
Kit de Desenvolvimento Java (JDK) versão 8 ou superior.
Apache Maven, versão 3.2 ou superior.
cURL ou um utilitário HTTP semelhante para testar a funcionalidade.
Uma fila ou tópico para Azure Service Bus. Se não tiveres uma, cria uma fila Service Bus ou cria um tópico Service Bus.
Um aplicativo Spring Boot. Se você não tiver um, crie um projeto Maven com o Spring Initializr. Certifique-se de selecionar Maven Project e, em Dependências, adicione as dependências Spring Web e Azure Support, depois selecione Java versão 8 ou superior.
Nota
Para dar acesso à sua conta aos seus recursos de Azure Service Bus, atribua as funções Azure Service Bus Data Sender e Azure Service Bus Data Receiver à conta Microsoft Entra que está a usar atualmente. Para mais informações sobre a concessão de funções de acesso, consulte Atribuir funções do Azure usando o portal Azure e Autenticar e autorizar uma aplicação com o Microsoft Entra ID para aceder a entidades do Azure Service Bus.
Importante
O Spring Boot versão 2.5 ou superior é necessário para concluir as etapas neste artigo.
Enviar e receber mensagens do Azure Service Bus
Com uma fila ou um tópico para o Azure Service Bus, pode enviar e receber mensagens usando o Spring Cloud Azure Stream Binder Service Bus.
Para instalar o módulo Spring Cloud Azure Stream Binder Service Bus, adicione as seguintes dependências ao seu ficheiro pom.xml:
A Lista de Materiais Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se estiveres a usar o Spring Boot 4.0.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para7.1.0.Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para6.1.0.Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para5.25.0.Se você estiver usando o Spring Boot 2.x, certifique-se de definir a versão
spring-cloud-azure-dependenciescomo4.20.0.Esta lista de materiais (BOM) deve ser configurada na seção
<dependencyManagement>do seu arquivo pom.xml. Isto garante que todas as dependências do Spring Cloud Azure usam a mesma versão.Para mais informações sobre a versão usada nesta BOM, consulte Qual Versão do Spring Cloud Azure Devo Usar.
O artefato Spring Cloud Azure Stream Binder Service Bus:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId> </dependency>
Codificar a aplicação
Use os seguintes passos para configurar a sua aplicação a usar uma fila ou um tópico do Service Bus para enviar e receber mensagens.
Configure as credenciais de Service Bus no ficheiro de configuração
application.properties.spring.cloud.azure.servicebus.namespace=${AZURE_SERVICEBUS_NAMESPACE} spring.cloud.stream.bindings.consume-in-0.destination=${AZURE_SERVICEBUS_QUEUE_NAME} spring.cloud.stream.bindings.supply-out-0.destination=${AZURE_SERVICEBUS_QUEUE_NAME} spring.cloud.stream.servicebus.bindings.consume-in-0.consumer.auto-complete=false spring.cloud.stream.servicebus.bindings.supply-out-0.producer.entity-type=queue spring.cloud.function.definition=consume;supply; spring.cloud.stream.poller.fixed-delay=60000 spring.cloud.stream.poller.initial-delay=0A tabela a seguir descreve os campos na configuração:
Campo Descrição spring.cloud.azure.servicebus.namespaceEspecifique o namespace que obteve no seu Service Bus a partir do portal Azure. spring.cloud.stream.bindings.consume-in-0.destinationEspecifique a fila do Service Bus ou o tópico do Service Bus que usou neste tutorial. spring.cloud.stream.bindings.supply-out-0.destinationEspecifique o mesmo valor utilizado para o destino de entrada. spring.cloud.stream.servicebus.bindings.consume-in-0.consumer.auto-completeEspecifique se as mensagens devem ser processadas automaticamente. Se definido como false, um cabeçalho de mensagem deCheckpointerserá adicionado para permitir que os desenvolvedores gerenciem as mensagens manualmente.spring.cloud.stream.servicebus.bindings.supply-out-0.producer.entity-typeEspecifique o tipo de entidade para a ligação de saída, pode ser queueoutopic.spring.cloud.function.definitionEspecifique o bean funcional que deve ser associado ao(s) destino(s) externo(s) exposto(s) pelas associações. spring.cloud.stream.poller.fixed-delayEspecifique o atraso fixo para o poller padrão em milissegundos. O valor predefinido é 1000 L. O valor recomendado é60000.spring.cloud.stream.poller.initial-delayEspecifique o atraso inicial para gatilhos periódicos. O valor predefinido é 0.Edite o arquivo de classe de inicialização para mostrar o seguinte conteúdo.
import com.azure.spring.messaging.checkpoint.Checkpointer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; import reactor.core.publisher.Flux; import reactor.core.publisher.Sinks; import java.util.function.Consumer; import java.util.function.Supplier; import static com.azure.spring.messaging.AzureHeaders.CHECKPOINTER; @SpringBootApplication public class ServiceBusQueueBinderApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusQueueBinderApplication.class); private static final Sinks.Many<Message<String>> many = Sinks.many().unicast().onBackpressureBuffer(); public static void main(String[] args) { SpringApplication.run(ServiceBusQueueBinderApplication.class, args); } @Bean public Supplier<Flux<Message<String>>> supply() { return ()->many.asFlux() .doOnNext(m->LOGGER.info("Manually sending message {}", m)) .doOnError(t->LOGGER.error("Error encountered", t)); } @Bean public Consumer<Message<String>> consume() { return message->{ Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER); LOGGER.info("New message received: '{}'", message.getPayload()); checkpointer.success() .doOnSuccess(s->LOGGER.info("Message '{}' successfully checkpointed", message.getPayload())) .doOnError(e->LOGGER.error("Error found", e)) .block(); }; } @Override public void run(String... args) { LOGGER.info("Going to add message {} to Sinks.Many.", "Hello World"); many.emitNext(MessageBuilder.withPayload("Hello World").build(), Sinks.EmitFailureHandler.FAIL_FAST); } }Gorjeta
Neste tutorial, não há operações de autenticação nas configurações ou no código. No entanto, a ligação aos serviços do Azure requer autenticação. Para completar a autenticação, precisa de usar o Azure Identity. O Spring Cloud Azure utiliza
DefaultAzureCredential, que a biblioteca Azure Identity fornece para te ajudar a obter credenciais sem quaisquer alterações de código.DefaultAzureCredentialSuporta vários métodos de autenticação e determina qual método usar em tempo de execução. Essa abordagem permite que seu aplicativo use diferentes métodos de autenticação em ambientes diferentes (como ambientes locais e de produção) sem implementar código específico do ambiente. Para obter mais informações, consulte DefaultAzureCredential.Para completar a autenticação em ambientes de desenvolvimento locais, pode usar Azure CLI, Visual Studio Code, PowerShell ou outros métodos. Para mais informações, consulte Autenticação do Azure em ambientes de desenvolvimento Java. Para completar a autenticação em ambientes de alojamento Azure, recomendamos a utilização da identidade gerida atribuída pelo utilizador. Para mais informações, consulte O que são identidades geridas para Azure recursos?
Inicie a aplicação. Mensagens como o exemplo a seguir serão postadas no log do aplicativo:
New message received: 'Hello World' Message 'Hello World' successfully checkpointed