RabbitMQ的基本了解

本文详细介绍了如何在Docker中安装RabbitMQ,包括镜像下载、配置管理界面,并展示了如何在SpringBoot应用中使用RabbitMQ的生产者、消费者和消息路由。一步步教你实现消息队列的搭建与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一. 概念

二. 四大核心概念

三.docker安装rabbitmq

四. springboot使用RabbitMQ


一. 概念

RabbitMQ 是一个消息中间件:它是一个面向消息中间件的开放式标准应用层协议(它不处理消息而是接收,存储和转发消息数据)

二. 四大核心概念

1.生产者
产生数据发送消息的程序是生产者

2.交换机
交换机在接收来自生产者的消息,要将消息推送到队列中。而且这个交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃

3.队列
Queue:队列,是 Rabbitmq的内部对象,是将消息以推送或者拉取方式给消费者进行消费

4.消费者
消费者,表示一个从消息队列中取得消息的客户端应用程序。

      创建消息             路由键              pull/push
   生产者------------>交换机------------>队列------------>消费者

三.docker安装rabbitmq

3.1 下载镜像

docker pull rabbitmq:management

3.2 运行镜像

设置用户名和密码

docker run -d \
     --name my-rabbitmq \
     -p 5672:5672 -p 15672:15672 \
     -v /data/rabbitmq:/var/lib/rabbitmq \
     --hostname my-rabbitmq-host \
     -e RABBITMQ_DEFAULT_VHOST=my_vhost \
     -e RABBITMQ_DEFAULT_USER=admin \
     -e RABBITMQ_DEFAULT_PASS=admin \
     --restart=always \
     rabbitmq:management

参数说明:
   -d:后台运行容器
   -name:指定容器名
   -p:指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号)
   -v:映射目录或文件,启动了一个数据卷容器,数据卷路径为:/var/lib/rabbitmq,再将此数据卷映射到住宿主机的/data目录
   --hostname:主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名)
   -e:指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
   --restart=always:当Docker重启时,容器能自动启动   
   rabbitmq:management:镜像名

开启端口号

 firewall-cmd --zone=public --add-port=5671/tcp --permanent

 firewall-cmd --zone=public --add-port=15671/tcp --permanent

#重启防火墙(不重启以上的设置是不会生效的):
firewall-cmd --reload

3.3 查看是否可以进入

http://[虚拟机ip]/15672

四. springboot使用RabbitMQ

4.1 给pom.xml添加到rabbitmq依赖

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

4.2 application.yml的连接配置

server:
  port: 8001
spring:
  rabbitmq:
    host: 192.168.88.140
    port: 5672
    username: springboot
    password: 123456
    ## 使用在docker安装rabbitmq时的虚拟机名字
    virtual-host: my_vhost

4.3 创建直连交互机

@Configuration //可以把该类变成配置类
public class DirectExchangeConfig {

    //1.创建队列
    @Bean
    public Queue directQueue(){
        return new Queue("directQueue");
    }

    @Bean
    public Queue directQueue1(){
        return new Queue("directQueue1");
    }

    //2.创建交换机
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("directExchange");
    }

    //3.将队列通过路由键绑定到交换机中
    @Bean
    public Binding directBinding(){
        return BindingBuilder.bind(directQueue()).to(directExchange()).with("directRouting");
    }
    @Bean
    public Binding directBinding1(){
        return BindingBuilder.bind(directQueue1()).to(directExchange()).with("directRouting1");
    }

4.4 创建一个类,可以让生产者发送方法

@RestController
public class SendController {

    //获取rabbitmq的消息发送模块
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("/sendDirect")
    public String sendDirectMessga(String msg){
        rabbitTemplate.convertAndSend("directExchange","directRouting",msg);
        rabbitTemplate.convertAndSend("directExchange","directRouting1",msg);
        return msg+",消息发送成功";
    }

}

通过指定路由键directRouting发送给交换机directExchange

交互机directExchange通过指定的路由键把消息msg投递到对应的队列上面去

4.5 启动生产者,就可以看见发送了两个消息过去

4.6 创建消费者,并启动

@Component
@RabbitListener(queues = {"directQueue","directQueue1"})
public class DirectRecevier {

    @RabbitHandler
    public void handleDirectMsg(String ss){
        System.out.println(ss);
    }

}

4.7 消息就消费掉了

@RabbitListener:表示把该类变成配置类

@RabbitHandler注解:指定对消息的处理

@Bean:把方法放到spring上下文里面去

@RabbitListener(queues = {"directQueue","directQueue1"}):这样就可以一次消费两条消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值