RabbitMQ Java使用示例

121 阅读2分钟

Spring Boot中使用RabbitMQ,你可以使用Spring Boot提供的集成来更方便地编写RabbitMQ生产者和消费者。安装方式可看:最新 Windows10 中安装RabbitMQ详细步骤

1. 添加依赖

示例使用的框架为Java spring boot。确保你的Spring Boot项目中已经配置了RabbitMQ依赖,可以在pom.xml文件中添加以下依赖:

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

2. 连接配置

配置RabbitMQ连接信息,通常在application.properties或application.yml中配置:

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

3. RabbitMQ配置文件

sendMessage 方法中的消息发送到了 queue.getName() 指定的队列,其中 queue 是通过 Spring 注入的队列实例。默认情况下,这将是一个匿名队列

配置消费指定队列,配置名为 test 的队列,如果不配置,spring boot在启动时不会默认初始化队列,启动会报错。

package com.gly.zhongnan.mq.rabbit.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.core.Queue;
/**
 * @author 闲者
 * @date 2023-09-13 10:28
 */
@Configuration
public class RabbitMQConfig {

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

	//想要初始几个队列,就写几个bean
	@Bean
    public Queue myQueue1() {
        return new Queue("test1");
    }
}

这样,消费者就会监听名为 "test" 的队列,并处理从 sendMessage 发送的消息。确保队列名称在生产者和消费者之间匹配,以便消息可以正确地传递。

4. RabbitMQ生产者

创建一个RabbitMQ生产者。注意,这里使用定时器,每隔5秒发送消息,消费者进行消费测试

package com.gly.zhongnan.mq.rabbit.producer;

import com.alibaba.fastjson2.JSONObject;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 闲者
 * @date 2023-09-13 10:09
 */
@Component
public class RabbitMQProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

//    @Autowired
//    private Queue queue;
//
//    public void sendMessage(String message) {
//        rabbitTemplate.convertAndSend(queue.getName(), message);
//        System.out.println("Sent: " + message);
//    }

    @Scheduled(fixedDelay = 5000) // 每隔5秒发送一次消息
    public void sendScheduledMessage() {
        String exchangeName = ""; // 使用默认交换器
        String routingKey = "test"; // 目标队列的名称

        List<Map<String, Object>> messages = createMessages(); // 创建消息列表
        for (Map<String, Object> message : messages) {
            rabbitTemplate.convertAndSend(exchangeName, routingKey, JSONObject.toJSONString(message));
            System.out.println("Sent: " + JSONObject.toJSONString(message));
        }
    }

    private List<Map<String, Object>> createMessages() {
        // 创建要发送的消息列表
        List<Map<String, Object>> messages = new ArrayList<>();
        // 添加消息
        for (int i = 1; i <= 5; i++) {
            Map<String, Object> message = new HashMap<>();
            message.put("key", "value" + i);
            messages.add(message);
        }
        return messages;
    }
}

使用 convertAndSend 方法明确指定了交换器名称为空字符串(使用默认交换器),并将 routingKey 设置为 "test",这样消息就会发送到指定的队列。

在上述代码中,注入了RabbitTemplate和队列,然后使用rabbitTemplate来发送消息。

5. RabbitMQ消费者

生产者将消息发送到 "test" 队列,而消费者将监听该队列以接收消息。确保队列名称在生产者和消费者之间匹配,以便消息可以正确地传递。

package com.gly.zhongnan.mq.rabbit.consumer;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author 闲者
 * @date 2023-09-13 10:10
 */
@Component
public class RabbitMQConsumer {

    @RabbitListener(queues = "test")
    public void receiveMessage(String message) {
        System.out.println("Received: " + message);
        // 处理接收到的消息
    }

}

spring boot 成功启动后,定时器将自动进行消息发送和消费。

**注意:**这仅仅是个示例,可自定义更复杂的配置。