首页 > 其他分享 >在Spring Cloud中使用RabbitMQ完成一个消息驱动的微服务

在Spring Cloud中使用RabbitMQ完成一个消息驱动的微服务

时间:2023-12-28 11:33:52浏览次数:26  
标签:Spring springframework RabbitMQ org message Cloud 消息


Spring Cloud系列目前已经有了Spring Cloud五大核心组件:分别是,Eureka注册中心,Zuul网关,Hystrix熔断降级,openFeign声明式远程调用,ribbon负载均衡。这五个模块,对了,有没有发现,其实我这五个模块中ribbon好像还没有案例例举,目前只有一个Ribbon模块的搭建,后边我会完善的。

今天我们不主要围绕Spring Cloud的五大组件,本篇会以新的模块进行,完成一个以Rabbit MQ消息队列为核心的模块功能设计。在模块进行之前,我们先了解Spring Cloud 的Stream,这个很重要。

Spring Cloud Steam 是一个可以用来作为微服务应用构建消息驱动能力的框架,他可以基于Spring Boot来进行创建一个独立的,并且可以用来生产的Spring 应用程序。他通过使用Spring Integration(一体化)来链接消息嗲了中间件用以实现消息事件驱动的微服务应用。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动装配的实现,并且熟悉Spring的都知道他有个发布-订阅模式,消费组,以及消息分区核心部分。

Spring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框架。通过使用Spring Cloud Stream,可以有效地简化开发人员对消息中间件的使用复杂度,让系统开发人员可以有更多的精力关注于核心业务逻辑的处理。由于Spring Cloud Stream基于Spring Boot实现,所以它秉承了Spring Boot的优点。

  • Binder:Binder是Spring Cloud Stream的核心组件之一,它提供了与消息中间件的连接和交互。通过Binder,开发者可以将应用程序与特定的消息中间件进行集成,而无需关注底层的细节。
  • 消息通道:Spring Cloud Stream使用消息通道作为应用程序中消息的传输媒介。消息通道可以是发布-订阅模式或点对点模式,开发者可以根据需求选择合适的通道类型。
  • 绑定注解:通过使用绑定注解,开发者可以将消息通道与应用程序中的方法进行绑定。例如,@Input注解用于将方法绑定到输入通道,@Output注解用于将方法绑定到输出通道。
  • 消息转换:Spring Cloud Stream支持自动的消息转换,使得开发者可以使用不同的数据格式和协议进行消息的传输。它提供了一些内置的消息转换器,同时也支持自定义的消息转换器。
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

在应用程序中配置Rabbit MQ的链接信息,在application.yml或者application.properties中添加配置。

spring.cloud.stream.bindings.input.destination=myInputQueue
spring.cloud.stream.bindings.output.destination=myOutputQueue

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

这里的myInputQueue和myOutputQueue是你自定义的队列名称,你可以根据自己的需求进行命名。

接下来,创建一个消息处理器来处理输入和输出的消息。你可以使用@StreamListener注解来监听输入消息,并使用@EnableBinding注解来绑定输入和输出通道。

import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;

@EnableBinding(Sink.class)
public class MessageProcessor {

    @StreamListener(Sink.INPUT)
    public void processMessage(String message) {
        // 处理输入消息
        System.out.println("Received message: " + message);
        
        // 处理完后可以发送输出消息
        // output.send(MessageBuilder.withPayload("Output message").build());
    }
}

@EnableBinding(Sink.class)将输入通道绑定到Sink,@StreamListener(Sink.INPUT)注解用于监听输入消息。你可以在processMessage方法中处理输入消息。

如果你想发送输出消息,你可以注入MessageChannel并使用它发送消息。例如,你可以在MessageProcessor类中注入MessageChannel

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;

@EnableBinding(Source.class)
public class MessageProcessor {

    private final MessageChannel output;

    @Autowired
    public MessageProcessor(Source source) {
        this.output = source.output();
    }

    @StreamListener(Sink.INPUT)
    public void processMessage(String message) {
        // 处理输入消息
        System.out.println("Received message: " + message);
        
        // 处理完后发送输出消息
        output.send(MessageBuilder.withPayload("Output message").build());
    }
}

这样,当有消息发送到输入通道时,processMessage方法将被调用,并处理输入消息。在处理完输入消息后,它将发送一个输出消息到输出通道。


标签:Spring,springframework,RabbitMQ,org,message,Cloud,消息
From: https://blog.51cto.com/miaow/9011995

相关文章

  • 在Spring Cloud中使用Zuul网关实现一个案例
    本篇依旧是在SpringCloud系列的博主已经搭建的SpringCloud微服务模块上进行的,注意,本文依旧适合初学者和或者在SpringCloud框架了解不是很深入的基础的开发者,本系列说不上有多高大上,博主坚持通过简单的案例,让开发者可以对SpringCloud的组件进行了解和使用,并在一定程度上介绍这些......
  • 在Spring Cloud中使用Hystrix服务完成熔断降级处理
    举例上次发布博文隔了好几天了,今天我们重点围绕SpringCloud的Hystrix服务的熔断降级处理进行,在之前篇的文章中,我们完成了SpringCloud的各个微服务模块的搭建,这个是既往的事实,如果你还不知道该如何搭建SpringCloud微服务,请参照我之前发的文章,SpringCloud系列文章就行。正式开始......
  • SpringBoot 整合 ShardingSphere JDBC、MySQL分表实例
    1.概述ShardingSphere分为ShardingSphere-JDBC、ShardingSphere-Proxy、ShardingSphere-Sidecar(TODO)。ShardingSphere官方手册:传送门;这里使用的是ShardingSphere-JDBC,ShardingSphere-JDBC为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar......
  • Spring IoC(控制反转)、DI(依赖注入)
    1.IoCIoC(InversionofControl,控制反转)面向对象的一种设计思想,很多语言的框架都使用了IoC这个设计思想,并非特属于Spring,其实现为将实例对象交给第三方容器管理,创建实例对象的时候,注入这些实例对象所依赖的实例对象,而不是在内部创建。所谓的内部创建如下所示,连接数据库的DateSour......
  • Spring之RestTemplate使用小结
    Spring之RestTemplate使用小结1.基本接口捞出源码,看一下其给出的一些常用接口,基本上可以分为下面几种//get请求public<T>TgetForObject();public<T>ResponseEntity<T>getForEntity();//head请求publicHttpHeadersheadForHeaders();//post请求publicURI......
  • 【Spring】SpringMVC项目升级成SpringBoot实践
    将SpringMVC项目升级为SpringBoot项目需要一系列详细的步骤。以下是一个更详细的步骤指南:项目初始化:创建一个新的SpringBoot项目。您可以使用SpringInitializr或SpringBoot的Maven插件来快速生成项目结构。依赖管理:在新项目中,添加所需的依赖。根据您的项目需求,添加SpringBoot......
  • VS Code 设置 Spring Boot2.x 项目启动参数与 VM 参数
    参考https://blog.csdn.net/Jawfneo/article/details/101677042环境环境版本说明windows10vscode1.85.1SpringBootExtensionPackv0.2.1vscode插件ExtensionPackforJavav0.25.15vscode插件JDK11Springboot2.3.12.RELEASEApach......
  • spring原理(一)
    定义bean类的属性值类publicclassPropertyValue{privatefinalStringname;privatefinalObjectvalue;publicPropertyValue(Stringname,Objectvalue){this.name=name;this.value=value;}publicStringgetName()......
  • RabbitMQ学习二 修改默认密码
    RabbitMQ的一些常用命令#启动rabbitmqservicerabbitmq-serverstart#查看rabbitMQ的运行状态servicerabbitmq-serverstatus#开启rabbitMQ的后台管理插件rabbitmq-pluginsenablerabbitmq_management#重启RabbitMQ服务servicerabbitmq-serverrestart Rabbi......
  • springboot 共享session
    在SpringBoot中,可以使用SpringSession来实现共享session。SpringSession是一个基于Spring的会话管理框架,它提供了跨多个服务器的会话共享功能。要使用SpringSession实现共享session,需要按照以下步骤进行配置:添加依赖在SpringBoot项目的pom.xml文件中添加SpringSession的依赖:x......