RabbitMQ学习-Seven

再SpringBoot中使用MQ

1.创建SpringBoot项目

除了我们平常使用的一些工具依赖,还需要选择这个Spring for RabbitMQ依赖

2.需要在application.yml文件中进行配置

复制代码
server:
 port :9090
spring:
 application:
  name:producer
 rabbitmq:
  host: 你的主机名
  port: 5672
  virtual-host: 虚拟主机名称
  username: admin
  password: admin123

3.测试使用

复制代码
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;

@RestController
public class TestController {

    @Resource
    private TestService testService;

    @RequestMapping("test")
    public String test(String msg){
        testService.sendMsg(msg);
        return "success";
    }
}

@Service
public class TestService {
    
    @Resource
    private AmqpTemplate amqpTemplate; // 注入RabbitMQ的模板对象,用于发送消息
 
    @Override
    public void sendMsg(String msg) {
        // 发送消息到队列
        amqpTemplate.convertAndSend("queue1", msg);
 
        // 发送消息到交换机(订阅交换机,第二个参数为空)
        amqpTemplate.convertAndSend("wx1", "", msg);
 
        // 发送消息到交换机(路由交换机,第二个参数为路由key)
        amqpTemplate.convertAndSend("wx2", "a", msg);
    }
}

完善一下测试使用类

复制代码
import javax.annotation.Resource;

@Service
public class TestService {

    @Resource
    private AmqpTemplate amqpTemplate;

    public void sendMsg(String msg) {
        if (msg.startsWith("q_")) {
            // 发送消息到队列
            amqpTemplate.convertAndSend("queue1", msg);
        } else if (msg.startsWith("f_")) {
            // 发送消息到交换机(订阅交换机)
            amqpTemplate.convertAndSend("ex1", "", msg);
        } else if (msg.startsWith("r_")) {
            // 发送消息到交换机(路由交换机)
            if (msg.startsWith("r_a")) {
                amqpTemplate.convertAndSend("ex2", "a", msg);
            } else if (msg.startsWith("r_b")) {
                amqpTemplate.convertAndSend("ex2", "b", msg);
            }
        }
    }
}

此时从浏览器发送请求:localhost:9090/test?msg=....就可以发送消息到队列中

4.然后创建消费者项目

前期步骤一致,只是配置文件的端口号进行变更

复制代码
package com.qfedu.consumer.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
//@RabbitListener(queues ={"queue1","queue2"})
// 首先通过RabbitListener注解监听队列
@RabbitListener(queues = "queue1")
public class ReceiveMsgService {

    // 然后通过RabbitHandler注解将队列中的数据作为入参使用
    @RabbitHandler
    public void receiveMsg(String msg) {
        System.out.println("接收Msg:" + msg);
    }

    // 另一个可能的消息接收方法,处理字节数组类型的数据
    //@RabbitHandler
    //public void receiveMsg(byte[] bs) {
    //    // 处理字节数组的逻辑
    //}
}

此时就在SpringBoot中实现了生产者发送消息,然后消费者消费消息!!

相关推荐
Komorebi_999920 分钟前
大模型学习day5
学习·大模型
逍遥德44 分钟前
AI时代,计算机专业大学生学习指南
java·javascript·人工智能·学习·ai编程
网络与设备以及操作系统学习使用者1 小时前
直连路由优先级最高
运维·网络·学习·华为·智能路由器
逆羽飘扬2 小时前
【AI Infra面试】基础学习汇总篇
人工智能·学习
05候补工程师3 小时前
[线性代数] 判定线性相关性的“降维打击”:从基本定理到速通特殊法
经验分享·笔记·学习·线性代数·考研
太阳上的雨天3 小时前
AI学习ing~
学习·ai·ai编程
麦田里的粮仓4 小时前
文档站点生成器 - Fumadocs
学习
技术小结-李爽4 小时前
【学习】怎样把“提问题”推荐给别人
学习
sweetheart7-74 小时前
go/golang 入门学习笔记(Java/Python/C++转Go快速上手)
笔记·学习·golang·go语言
꧁꫞꯭零꯭点꯭꫞꧂4 小时前
FastAPI入门学习
学习·fastapi