欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RabbitMQ 学习记录(二):Springboot2.X整合Rabbitmq(1)

程序员文章站 2022-03-07 11:26:56
一、版本说明1、Springboot版本:2.4.02、Rabbitmq版本:3.8.9二、Springboot整合Rabbitmq1、项目整体结构2、POM文件

一、版本说明

1、Springboot版本:2.4.0

2、Rabbitmq版本:3.8.9

二、Springboot整合Rabbitmq

1、项目整体结构

RabbitMQ 学习记录(二):Springboot2.X整合Rabbitmq(1)

2、POM文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cmxy</groupId>
    <artifactId>learn-rabbit</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>learn-rabbit</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3、配置文件,配置非常简单,理论上可以都不用配置因为Springboot已经给定了默认值

##配置Rabbitmq
spring:
  rabbitmq:
    addresses: 127.0.0.1
    port: 5672
    ##配置虚拟机
    virtual-host: /
    ##消息开启手动确认
    listener:
      direct:
        acknowledge-mode: manual

4、实现生产/消费消息

根据Rabbitmq官网介绍总共有7种工作模式,分别是

(1)简单工作模式(即一个生产者对应一个消费者,这种模式相对来说在实际中用的比较少)

RabbitMQ 学习记录(二):Springboot2.X整合Rabbitmq(1)

(2)工作队列(即一个生产者对应多个消费者)

RabbitMQ 学习记录(二):Springboot2.X整合Rabbitmq(1)

代码实现:

1、首先在Rabbitmq的配置类里声明一个工作队列

package com.cmxy.learnrabbit.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 该类用于配置Rabbitmq相关信息
 */
@Configuration
public class RabbitmqConfig {


    /*Work模型即:一个生产者对应多个消费者*/
    //声明一个Work模型队列
    @Bean
    public Queue workQueue() {
        return new Queue("queue_work");
    }
}
2、定义两个消费者(也可以是一个或多个)
@Component
public class WorkReceiveListener {

    /**
     *
     * @param msg 发送的消息
     * @param channel 通道信息
     * @param message 附加的参数信息
     */
    //当前消费者绑定名称为queue_work的队列
    @RabbitListener(queues = "queue_work")
    public void receiveMessage(String msg, Channel channel, Message message) {
        // 只包含发送的消息
        System.out.println("1接收到消息:" + msg);
    }

    @RabbitListener(queues = "queue_work")
    public void receiveMessage2(Object obj, Channel channel, Message message) {
        // 包含所有的信息
        System.out.println("2接收到消息:" + obj);
    }
}

3、使用RabbitTemplate生产消息

@Autowired
private RabbitTemplate rabbitTemplate;

/**
 * 通过Work模型队列发送消息
 */
@Override
public void sendWorkMessage() {
    System.out.println("生产者开始生产消息....");
    for (int i = 0; i < 10; i++) {
        rabbitTemplate.convertAndSend("queue_work", "测试work模型" + i);
    }
    System.out.println("生产者结束生产");
}

4、结果如下

RabbitMQ 学习记录(二):Springboot2.X整合Rabbitmq(1)

5、未完待续。

参考文章:

https://blog.csdn.net/fan521dan/article/details/104912794

https://www.rabbitmq.com/getstarted.html

 

本文地址:https://blog.csdn.net/weixin_37624903/article/details/110874584