当前位置: 首页 > article >正文

RabbitMQ快速上手及入门

概念

概念:

  • publisher:生产者,也就是发送消息的一方

  • consumer:消费者,也就是消费消息的一方

  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理

  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。

  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

helloworld快速上手

启动mq服务

brew services start rabbitmq

浏览器打开:http://localhost:15672/

可以看到成功进入

Username和Password均为guest

引入依赖

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

配置文件

spring:
    rabbitmq:
        host: localhost #域名
        port: 5672 #端口
        username: guest #用户名
        password: guest #密码

生产者定义

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
@Slf4j
public class SpringRabbitListener {

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "test.queue", durable = "true"),
            exchange = @Exchange(name = "test.direct"),
            key = "test.key"
    ))
    public void listenPaySuccess(String msg){
        System.out.println("消费者接收到topic.queue的消息:【" + msg + "】");
    }
}

消费者定义

import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
public class SpringAmqtest {

    @Autowired
    private RabbitTemplate rabbitTemplate;


    @Test
    public void testQueue(){
        rabbitTemplate.convertAndSend("test.direct","test.key", "测试下发送消息");
    }
}

启动springboot服务

控制台消息

可以看到生产者发送消息且成功被消费者消费

参考资料:

黑马RabbitMQ


http://www.kler.cn/a/530957.html

相关文章:

  • 【编译系列】Torch.compile()训练编译——算子融合逻辑 工程化
  • Hutool工具类
  • Rust 变量特性:不可变、和常量的区别、 Shadowing
  • C#面试常考随笔9:什么是闭包?
  • deep generative model stanford lecture note2 --- autoregressive
  • python实现金属杆与圆形纸片运动模拟
  • 机器学习10
  • guava:基于TypeToken解析泛型类的类型变量(TypeVariable)的具体类型
  • Python处理数据库:MySQL与SQLite详解
  • Python小游戏29乒乓球
  • SQL范式与反范式_优化数据库性能
  • 基于LLM的路由在专家混合应用:一种新颖的交易框架,该框架在夏普比率和总回报方面提升了超过25%
  • S4 HANA明确税金汇差科目(OBYY)
  • Windows 中的 WSL:开启你的 Linux 之旅
  • 掌握API和控制点(从Java到JNI接口)_36 JNI开发与NDK 04
  • 637. 二叉树的层平均值
  • 每日 Java 面试题分享【第 20 天】
  • OpenAI宣布ChatGPT集成到苹果操作系统,将带来哪些新功能?
  • Rust结构体方法语法:让数据拥有行为
  • DeepSeek 集成到个人网站的详细步骤
  • CompletableFuture使用
  • 简易CPU设计入门:指令单元(二)
  • Google C++ Style / 谷歌C++开源风格
  • 租房管理系统助力数字化转型提升租赁服务质量与用户体验
  • csapp笔记3.6节——控制(1)
  • 整形的存储形式和浮点型在计算机中的存储形式