热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【突破舒适圈】在SpringBoot中配置RabbitMq消息队列

目录业务背景软件安装1.Erlang2.RabbitMq3.启动RabbitMq服务项目配置1.配依赖2.配参数代码使用举例总结业务背景服务器的某个功能模块,在实际


目录

    • 业务背景
    • 软件安装
      • 1.Erlang
      • 2.RabbitMq
      • 3.启动RabbitMq服务
    • 项目配置
      • 1.配依赖
      • 2.配参数
    • 代码使用举例
    • 总结


业务背景

服务器的某个功能模块,在实际应用中会有多个用户同时访问,而每个用户需要进行的业务操作比较多,耗时较长。

若在第一个用户的操作没有完全做完时,第二个用户发起了请求,就有可能造成数据混乱的问题。

于是我们需要一个消息中间件来充当大门的作用,既要接待所有的“客人”(用户请求),又要保证每个“客人”的数据不错乱。
在这里插入图片描述

于是,RabbitMq凭借着自身功能强大,对待新手不友好…啊不对,是友好,友好…走入了我的视线。特此记录本次实践过程。


软件安装

这个东西之所以对新手很“友好”就是因为使用它的话,可不是仅仅导入几个依赖就能解决问题,还需要额外安装软件。减少大家走坑,资源链接两个软件地址


1.Erlang

首先安装这个软件,因为RabbitMq是基于这个东西开发出来的…
过程简单,一路下一步即可,安装完成后,配置环境变量,例如我的是这样。
在这里插入图片描述
然后打开控制台,输入erl,如果出现版本号,就代表安装完成。
在这里插入图片描述


2.RabbitMq

这里有大坑!!!
一定要注意版本对应!
一定要注意版本对应!
一定要注意版本对应!
比如官网的这张表,查询网址https://www.rabbitmq.com/which-erlang.html,不对应的话使用过程会无比艰巨,各种问题直接劝退。
在这里插入图片描述
安装过程同样简单,一路下一步。
安装完成后打开控制台(管理员模式!!!),进入sbin目录
输入rabbitmq-plugins.bat enable rabbitmq_management,代表开启服务组件
结果如图
在这里插入图片描述
接下来检查一下是否启动成功。输入rabbitmqctl status,结果会出来一些反馈,可能和我的不一样,不报错代表成功。
在这里插入图片描述
然后你就可以进入RabbitMq的图形化界面了。网址:http://127.0.0.1:15672/,不理解的可以去B站看看其他中间件的教学视频、原理就能理解了。
账号密码默认:guest,至于内部的操作以后在再学习。
在这里插入图片描述


3.启动RabbitMq服务

进入安装目录,双击启动。
在这里插入图片描述
短暂等待之后,启动成功不要把这个窗口关闭了!!
在这里插入图片描述

到这里,外部配置已经完成


项目配置


1.配依赖

pom文件中添加

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

2.配参数

我使用的是yml文件配置

spring:rabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guest

所有配置全部结束!!!


代码使用举例

例如我们用一个名字为demoQueue的队列进行监听消息。

配置类

package com.carehome.app.config;import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitConfig {/*** 定义demoQueue队列* @return*/@Beanpublic Queue demoString() {return new Queue("demoQueue");}}

模拟用户类(即不断向服务器发请求的用户群体)

package com.carehome.app.controller;import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;
import java.util.Date;@Component
public class RabbitProducer {@Autowiredprivate AmqpTemplate rabbitTemplate;public void sendDemoQueue() {Date date = new Date();String dateString = "发送数据!!!";System.out.println("向[demoQueue] 发出消息: " + dateString);// 第一个参数为刚刚定义的队列名称this.rabbitTemplate.convertAndSend("demoQueue", dateString);}
}

模拟接收

package com.carehome.app.controller;import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
@RabbitListener(queues = "demoQueue")
public class DemoQueueConsumer {/*** 消息消费* @RabbitHandler 代表此方法为接受到消息后的处理方法*/@RabbitHandlerpublic void recieved(String msg) {System.out.println("[demoQueue] 接收到了: " + msg);}}

最后我们通过一个控制器调用这些类,模拟业务场景。

模拟控制器类

package com.carehome.app.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RabbitMqController {@Autowiredprivate RabbitProducer rabbitProducer;@GetMapping("/sendDemoQueue")public Object sendDemoQueue() {rabbitProducer.sendDemoQueue();return "success";}
}

启动项目!!
http://localhost:8080/sendDemoQueue,访问两下!

在这里插入图片描述

成功!!!


总结

尽管开始因为自己不熟悉、以及网上某些狗P不同的假教学博客,踩了不少坑,但是经过不断地试错,终于配置完成,也算是收获了很多!!!


推荐阅读
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
author-avatar
真真贱贱_474
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有