SpringCloud Stream 整合RabbitMQ的基本步骤

 更新时间:2022年03月30日 10:39:13   作者:毛毛的猫毛  
这篇文章主要介绍了SpringCloud Stream 整合RabbitMQ的基本步骤,从项目介绍到生产者结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

本篇简单介绍SpringCloud Stream 整合RabbitMQ基本步骤:

  • 引入SpringCloud
  • 引入SpringCloud Stream相关依赖
  • 定义绑定接口: 消息生产者(Output…Binding) 、消息消费者(Input…Binding)
  • @EnableBinding 在对应类上进行定义
  • @StreamListener 在对应方法上创建监听用来消费消息
  • 调用output的send()方法生产消息

一、项目介绍

演示SpringCloud Stream 整合RabbitMQ,项目可以在一个工程里完成,本次建立了一个工程mq-service,其中包含三个Module:

  • mq-service-base :基础模块(包含了共用依赖、共用变量)
  • mq-service-producer :生产者
  • mq-service-consumer :消费者

注: 完全可以在一个工程里实现,这里为了区分,并为了后续单独启动或停止生产者或消费者做实验,也为了适应实际应用项目,所以创建了不同Module

(1)版本

  • SpringBoot : 2.0.6.RELEASE
  • SpringCloud : Finchley.SR2
  • RabbitMQ : 3.8.1

(2)项目整体结构

在这里插入图片描述

(3)基础模块

1)pom.xml

这里作为公共模块引入SpringCloud、Spring Cloud Stream等,其中也再此引入fastjson、lombok等工具依赖
(完整代码见文章最下面)
其中Spring Cloud Stream如下:

<!-- Spring Cloud Stream, 用于MQ消息发送-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

2) model

定义共用的变量,如CollectionRequest.java

二、生产者

(1)结构

在这里插入图片描述

(2)pom.xml

导入base的依赖即可,因为相关共用依赖在base中已经引入

<dependency>
	<groupId>com.zrk</groupId>
	<artifactId>mq-service-base</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

(3)定义绑定(接口)

OutputMessageBinding.java

public interface OutputMessageBinding {
    /** Topic 名称*/
    String OUTPUT = "message-center-out";
    @Output(OUTPUT)
    MessageChannel output();

}

(4)添加配置

# rabbitmq连接信息
spring.rabbitmq.addresses=192.168.1.125
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456

spring.cloud.stream.bindings.message-center-out.destination=message-center
spring.cloud.stream.rabbit.bindings.message-center-out.consumer.exchangeType=fanout

(5) 调用方法

CollectionServiceImpl.java

@Service
@EnableBinding(OutputMessageBinding.class)
public class CollectionServiceImpl implements CollectionService{
    @Resource
    private OutputMessageBinding outputMessageBinding;
    /**
     * @param schoolName
     * @param content
     */
    @Override
    public void getCollection(String schoolName, String content) {
        CollectionRequest request = new CollectionRequest();
        request.setSchoolName(schoolName);
        request.setContent(content);
        outputMessageBinding.output().send(MessageBuilder.withPayload(request).build());
    }
}

注: 主要是两点

  • @EnableBinding 定义
  • outputMessageBinding.output().send(MessageBuilder.withPayload(request).build()); 生产消息

三、消费者

(1)结构

在这里插入图片描述

(2)pom.xml

导入base的依赖即可,因为相关共用依赖在base中已经引入

<dependency>
	<groupId>com.zrk</groupId>
	<artifactId>mq-service-base</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

(3)定义绑定(接口)

InputMessageBinding.java

public interface InputMessageBinding {
    String INPUT = "message-center-input";
    @Input(INPUT)
    SubscribableChannel input();
}

注: 消费者这里与生产者不同,用的是SubscribableChannel ,而生产者用的是MessageChannel

(4)添加配置

# rabbitmq连接信息
spring.rabbitmq.addresses=192.168.1.125
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.cloud.stream.bindings.message-center-input.destination=message-center
spring.cloud.stream.bindings.message-center-input.group=${spring.application.name}

(5) 调用方法

CollectionReceiver.java

@Slf4j
@EnableBinding(InputMessageBinding.class)
public class CollectionReceiver {
    @StreamListener(InputMessageBinding.INPUT)
    public void handle(String value){
        log.info("[消息] 接收到发送消息MQ: {}", value);
        CollectionRequest request = JSON.parseObject(value, CollectionRequest.class);
        log.info("处理收集信息:" + request.toString());
    }
}

注: 主要是两点

  • @EnableBinding 定义
  • @StreamListener 注册监听

至此,生产者与消费者都创建完成,分别启动两个项目,并调用生产者接口进行验证:

四、验证 在postman 访问生产者接口:

localhost:30110/collection/getCollectionschoolName=‘zrk’&content=‘send message to rabbitmq’

在这里插入图片描述

观察消费者日志:

在这里插入图片描述

查看rabbitmq首页

在这里插入图片描述

在这里插入图片描述

则证明已经整合成功,接下来将研究一下更多的配置与用法。

如果有需要,可以参考项目完整代码:https://github.com/zrk333/mq-service

到此这篇关于SpringCloud Stream 整合RabbitMQ的文章就介绍到这了,更多相关SpringCloud Stream 整合RabbitMQ内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea快捷键生成getter和setter,有构造参数,无构造参数,重写toString方式

    idea快捷键生成getter和setter,有构造参数,无构造参数,重写toString方式

    这篇文章主要介绍了java之idea快捷键生成getter和setter,有构造参数,无构造参数,重写toString方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java常见的数据结构之栈和队列详解

    Java常见的数据结构之栈和队列详解

    这篇文章主要介绍了Java常见的数据结构之栈和队列详解,栈(Stack) 是一种基本的数据结构,具有后进先出(LIFO)的特性,类似于现实生活中的一叠盘子,栈用于存储一组元素,但只允许在栈顶进行插入(入栈)和删除(出栈)操作,需要的朋友可以参考下
    2023-10-10
  • 详解Java使用Jsch与sftp服务器实现ssh免密登录

    详解Java使用Jsch与sftp服务器实现ssh免密登录

    这篇文章主要介绍了详解Java使用Jsch与sftp服务器实现ssh免密登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • SpringBoot接口数据如何实现优雅的脱敏问题

    SpringBoot接口数据如何实现优雅的脱敏问题

    这篇文章主要介绍了SpringBoot接口数据如何实现优雅的脱敏问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 在 Spring Boot 中集成 MinIO 对象存储

    在 Spring Boot 中集成 MinIO 对象存储

    MinIO 是一个开源的对象存储服务器,专注于高性能、分布式和兼容S3 API的存储解决方案,本文将介绍如何在 Spring Boot 应用程序中集成 MinIO,以便您可以轻松地将对象存储集成到您的应用中,需要的朋友可以参考下
    2023-09-09
  • java实现web实时消息推送的七种方案

    java实现web实时消息推送的七种方案

    这篇文章主要为大家介绍了java实现web实时消息推送的七种方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 解决spring-cloud-config 多服务共享公共配置的问题

    解决spring-cloud-config 多服务共享公共配置的问题

    这篇文章主要介绍了解决spring-cloud-config 多服务共享公共配置的问题,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java中定时器Timer致命缺点案例详解

    Java中定时器Timer致命缺点案例详解

    这篇文章主要介绍了Java中定时器Timer致命缺点,以Java中定时器Time为案例整理下我的学习方法,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Spring中的@PostConstruct注解使用详解

    Spring中的@PostConstruct注解使用详解

    这篇文章主要介绍了Spring中的@PostConstruct注解使用详解,该注解被用来修饰一个非静态的void方法,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次,需要的朋友可以参考下
    2023-10-10
  • Java @Autowired注解底层原理详细分析

    Java @Autowired注解底层原理详细分析

    @Autowired注解可以用在类属性,构造函数,setter方法和函数参数上,该注解可以准确地控制bean在何处如何自动装配的过程。在默认情况下,该注解是类型驱动的注入
    2022-11-11

最新评论