Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringCloud下rabbitMq的使用(一)

SpringCloud下rabbitMq的使用(一)

原创
作者头像
3号攻城狮
修改于 2018-06-24 13:27:28
修改于 2018-06-24 13:27:28
5.6K0
举报

背景

使用SpringCloud开发了一个完整的项目,但是从学习SpringCloud到使用SpringCloud进行完整的项目开发,一直没有进行过系统性的学习,最近工作之余开始慢慢的学习,回顾,总结.之后会慢慢的完善一整个学习及使用过程,已及分享一些项目上使用的方式,不好的地方,请小伙伴们多多指正.刚好最近项目上使用的rabbitMq问题频发,那么第一个分享就从rabbitMq开始.

Ubuntu 安装RabbitMQ

不同Ubuntu版本之下安装方式略有差异,但是基本相同.

安装erlang

由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang,执行命令:

代码语言:txt
AI代码解释
复制
sudo apt-get install erlang-nox

在执行该命令时遇到错误:

代码语言:txt
AI代码解释
复制
The package lists or status file could not be parsed or opened

执行其他安装命令也报该错误,一般情况下是不会出现该问题,应该是之前的误操作导致.

解决方式:

代码语言:txt
AI代码解释
复制
sudo rm /var/lib/apt/lists/* -vf sudo apt-get clean sudo apt-get update

安装rabbitMq:

代码语言:txt
AI代码解释
复制
sudo apt-get update
sudo apt-get install rabbitmq-server

简易操作:

启动、停止、重启、状态rabbitMq命令:

代码语言:txt
AI代码解释
复制
启动:sudo rabbitmq-server start
关闭: sudo rabbitmq-server stop
重启: sudo rabbitmq-server restart
查看状态:sudo rabbitmqctl status

停止服务,修改配置

安装之后默认启动了rabbitmq,但是并不能正常访问rabbitmq管理界面.

进入安装文件夹/usr/lib/rabbitmq/bin,修改rabbitmqctl文件.

代码语言:txt
AI代码解释
复制
HOME=/var/lib/rabbitmq
image.png
image.png

安装参考

https://www.cnblogs.com/hongdada/p/7203589.html

rabbitMq基本概念

参考文档:https://blog.csdn.net/dreamchasering/article/details/77653512

rabbitMq使用方式

创建SpringBoot程序,导入依赖

代码语言:txt
AI代码解释
复制
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!-- test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <executions>
                    <execution>
                        <id>jacoco-initialize</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <phase>package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

基本使用

基础配置

代码语言:txt
AI代码解释
复制
spring:
  application:
    name: pikachu
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    publisher-confirms: true
    virtual-host: /
    listener:
      acknowledge-mode: MANUAL

程序结构

image.png
image.png

监听类

代码语言:txt
AI代码解释
复制
@Component
public class MqReceiver {
    @RabbitListener(queues = "pikachu")
    @RabbitHandler
    public void execute(String content){
        System.out.println("content----------->>>"+content);
    }
}

测试类

代码语言:txt
AI代码解释
复制
@RestController
@RequestMapping(value = "/sendmq")
public class TestController {
    @Autowired
    private AmqpTemplate amqpTemplate;

    @GetMapping
    public String sendmq(@RequestParam(name = "content") String content){
        amqpTemplate.convertAndSend("pikachu","send content :"+content);
        return content;
    }
}

运行程序

启动报错

image.png
image.png

解决方式:

在管理界面添加队列

image.png
image.png
image.png
image.png

应用启动成功,发送消息:

image.png
image.png
image.png
image.png

对于一个生产级的应用来说,每一次新起一个消息队列需要在管理界面添加队列名显然不太合适.

解决方式(一):

代码语言:txt
AI代码解释
复制
 @Bean
    public Queue pikachu() {
        return new Queue("pikachu",true);
    }

解决方式(二):

代码语言:txt
AI代码解释
复制
@Component
public class MqReceiver {

    //@RabbitListener(queues = "pikachu")
    //自动创建队列
    @RabbitListener(queuesToDeclare =@Queue("pikachu"))
    @RabbitHandler
    public void execute(String content){
        System.out.println("content----------->>>"+content);
    }
}

exchanges/queues绑定

为方便测试我们建立两组

代码语言:txt
AI代码解释
复制
 @RabbitHandler
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("pikachu_q"),
            key = "pikachu_1",
            exchange = @Exchange("pikachu_e")
    ))
    public void execute1(String content){
        System.out.println("execute1----------->>>"+content);
    }

    @RabbitHandler
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("pikachu_q"),
            key = "pikachu_2",
            exchange = @Exchange("pikachu_e")
    ))
    public void execute2(String content){
        System.out.println("execute2----------->>>"+content);
    }
代码语言:txt
AI代码解释
复制
@GetMapping(value = "/q1")
    public String sendmq1(@RequestParam(name = "content") String content){
        amqpTemplate.convertAndSend("pikachu_e","pikachu_1","send content :"+content);
        return content;
    }
    @GetMapping(value = "/q2")
    public String sendmq2(@RequestParam(name = "content") String content){
        amqpTemplate.convertAndSend("pikachu_e","pikachu_2","send content :"+content);
        return content;
    }
image.png
image.png

分别访问q1/q2得到结果如下:

image.png
image.png

总结

rabbitMq的初级使用大概就是这些,在下一篇文章中将会讲解spring cloud stream 的使用,已经rabbitMq在多实例的场景下如何消费.

不足之处请小伙伴多多之处,QAQ.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot整合RabbitMQ
RabbitMQ是开源消息队列系统,用erlang语言开发。如果不了解可以查看官网http://www.rabbitmq.com/ 这篇文章介绍一个springboot简单整合RabbitMQ。 1.
dalaoyang
2018/04/28
8830
SpringBoot整合RabbitMQ
【RabbitMQ】RabbitMQ应用
官方安装指南:https://www.rabbitmq.com/install-rpm.html
瑞新
2021/11/08
1.9K0
【RabbitMq 篇二】-RabbitMq 发送与消费
本文介绍RabbitMq各个消息类型,以及用使用Fanout 类型进行消息的发送和消费,让大家对RabbitMq有一个简单的认识。
胖虎
2019/06/26
1.3K0
【RabbitMq 篇二】-RabbitMq 发送与消费
RabbitMQ的基本使用
RabbitMQ的基本使用 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 定义消息接收一 /* 接收MQ消息 */ @Slf4j @Component public class MqReceiver { @RabbitListener(queues = "spoon-q
前端小鑫同学
2022/12/24
2470
Spring Cloud Bus之RabbitMQ初窥
和Spring Cloud Config一样,我们接下来要聊的Spring Cloud Bus也是微服务架构系统中的必备组件。Spring Cloud Bus可以将分布式系统的节点与轻量级消息代理链接,然后可以实现广播状态更改(例如配置更改)或广播其他管理指令。Spring Cloud Bus就像一个分布式执行器,用于扩展的Spring Boot应用程序,但也可以用作应用程序之间的通信通道。那么这里就涉及到了消息代理,目前流行的消息代理中间件有不少,Spring Cloud Bus支持RabbitMQ和Ka
江南一点雨
2018/04/02
7650
Spring Cloud Bus之RabbitMQ初窥
RabbitMQ集群整合SpringBoot2.x
RabbitMQ相信大家已经再熟悉不过了,作为业界四大主流消息中间件之一(Apache RocketMQ、Apache Kafka、Apache ActiveMQ、RabbitMQ),它具有非常好的性能和可靠性的集群模式,不仅仅在各大互联网大厂中广泛使用(比如同程艺龙、美团点评等),而且在互联网金融行业也常常被作为首选!
Criss@陈磊
2019/08/01
2.1K0
RabbitMQ实战:运行和管理RabbitMQ
上一篇 介绍了AMQP消息通信,包括队列、交换器和绑定,通过虚拟主机还可以隔离数据和权限,消息持久化和发送方确认模式确保了消息不丢失。
情情说
2018/04/27
1K0
RabbitMQ实战:运行和管理RabbitMQ
Spring Boot中使用RabbitMQ
复刻一篇老文,为后续要发的内容做一些铺垫 Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景: 消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合相应返回给消息用户 调用Web服务来检索数据 响应事件或错误 使用发布-订阅模式来提供内容或基于主题的消息路由 AMQP是Advanced Message Queuing Protocol的简称,它是一
程序猿DD
2018/02/01
1.3K0
Spring Boot中使用RabbitMQ
mall整合RabbitMQ实现延迟消息
1.安装Erlang,下载地址:http://erlang.org/download/otpwin6421.3.exe
猿天地
2019/07/09
7260
mall整合RabbitMQ实现延迟消息
【RabbitMq 篇三】-备份交换器
备份交换器也叫备胎交换器,顾名思义就是,替代现任的,分手后可以及时上位,让你的爱情持续下去,原理就是我爱你换不来你爱我,那我就去找备胎了。回到消息里就很好理解了,生产者发送消息,由于路由错误不能到达指定队列,所以就路由到备胎队列消费,这样做可以保证未被路由的消息不会丢失,其实保证消息不会丢失还可以通过消息的回调方法,添加ReturnListener的编程逻辑,但是这样做生产者的代码会复杂写,所以我们使用备份交换器实现。
胖虎
2019/06/26
7690
【RabbitMq 篇三】-备份交换器
【SpringBoot MQ系列教程】RabbitMq 初体验
mq 在异步解耦削峰的优势非常突出,现在很多的项目都会用到,掌握 mq 的知识点,了解如何顺畅的使用 mq,可以说是一个必备的职业技能点了
一灰灰blog
2020/02/18
8140
【SpringBoot MQ系列教程】RabbitMq 初体验
SpringBoot 整合 RabbitMQ
RabbitMQ 是由 Erlang 语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也可称为面向消息的中间件)。其支持 Windows、Linux/Unix、MAC OS 等操作系统和包括 Java 在内的多种编程语言。
好好学java
2018/09/21
6860
「 从0到1学习微服务SpringCloud 」07 RabbitMq的基本使用
在上篇文章中,我们已经用到了MQ,用于实现配置自动刷新。接下来,就具体说说MQ的应用场景以及RabbtMq的基本使用。
KEN DO EVERTHING
2019/04/24
5150
「 从0到1学习微服务SpringCloud 」07 RabbitMq的基本使用
SpringBoot集成RabbitMq
本站文章除注明转载/出处外,皆为作者原创,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Cheng_Blog
2022/02/25
3390
RabbitMQ使用教程(超详细)
下载地址:http://www.rabbitmq.com/download.html
全栈程序员站长
2022/07/21
2.8K1
RabbitMQ使用教程(超详细)
RabbitMQ入门:在Spring Boot 应用中整合RabbitMQ
在上一篇随笔中我们认识并安装了RabbitMQ,接下来我们来看下怎么在Spring Boot 应用中整合RabbitMQ。
全栈程序员站长
2022/07/18
6450
RabbitMQ入门:在Spring Boot 应用中整合RabbitMQ
RabbitMQ使用延迟插件,代码量直接减少一半!
RabbitMQ 是一个由 Erlang 语言开发的 AMQP(高级消息队列协议) 的开源实现。
码猿技术专栏
2023/05/01
6010
RabbitMQ使用延迟插件,代码量直接减少一半!
14. Springboot集成RabbitMQ
消息队列(Message Queue,简称 MQ)是一种异步的消息传递中间件,它解耦了应用程序之间的通信。应用程序可以将消息发送到队列,而无需知道谁会接收这些消息。接收应用程序可以从队列中检索消息,而无需知道谁发送了这些消息。消息队列是一种重要的中间件,它可以帮助应用程序之间进行异步、可靠、可扩展的通信。常见的消息队列中间件有ActiveMQ,RabbitMQ,Kafka......今天我们就来介绍RabbitMQ。
有一只柴犬
2024/03/28
2360
14. Springboot集成RabbitMQ
30分钟学玩转RabbitMQ
转载自 http://www.cnblogs.com/learnhow/p/8362289.html
allsmallpig
2021/02/25
3110
SpringBoot教程之RabbitMQ示例
SpringBoot框架已经提供了RabbitMQ的使用jar包,开发人员在使用RabbitMQ的时候只需要引用jar包简单的配置一下就可以使用RabbitMQ,这极大的简化了开发人员的开发成本,提升开发效率。
java之旅
2020/01/04
5580
相关推荐
SpringBoot整合RabbitMQ
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档