springboot集成rabbitmq

86 阅读1分钟
  1. 快速构建springboot项目,依托maven和aliyun的脚手架快速构建

image.png

image.png

image.png

  1. 修改配置文件,配置rabbitmq(模板properties,这里改为yml)
# 应用服务 WEB 访问端口
server:
  port: 8080
spring:
  rabbitmq:
    host: 192.168.10.128
    port: 5672
    username: guest
    password: guest

3. 添加配置类(可忽略)

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqConfig {

    public final static String testExchange = "testExchange";
    public final static String testQueue = "testQueue";
    public final static String testRoutingKey = "testRoutingKey";

    @Value("${spring.rabbitmq.host:localhost}")
    private String host;

    @Value("${spring.rabbitmq.port:5672}")
    private Integer port;

    @Value("${spring.rabbitmq.username:guest}")
    private String user;

    @Value("${spring.rabbitmq.password:guest}")
    private String pass;


    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(user);
        connectionFactory.setPassword(pass);
        connectionFactory.setVirtualHost("/");
        // connectionFactory.setPublisherConfirms(true); // 启用发布确认[@1@]
        return connectionFactory;
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        // 可以在这里配置 RabbitTemplate 的其他属性,比如消息确认回调等[@1@]
        return rabbitTemplate;
    }

    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange(testExchange, true, false, null);
    }

    @Bean
    public Queue testQueue() {
        return new Queue(testQueue);
    }

    @Bean
    public Binding binding(Queue testQueue, DirectExchange directExchange) {
        return BindingBuilder.bind(testQueue).to(directExchange).with(testRoutingKey);
    }
}

4. 构建消息发送类

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RabbitMqSender {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(String exchange, String routingKey, String message) {
        rabbitTemplate.convertAndSend(exchange, routingKey, message);
        System.out.println("Message sent: " + message);
    }

}

5. 构建消息接收类

@Service
public class RabbitMqReceiver {

    @RabbitListener(queues = RabbitMqConfig.testQueue)
    public void receive(String message) {
        System.out.println("Received message: " + message);
    }
}

6. 构建快速测试接口

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RabbitMqSendController {

    @Autowired
    RabbitMqSender sender;

    @PostMapping("/send")
    public void trySend() {
        int i = 0;
        while (i < 100) {
            sender.send(RabbitMqConfig.testExchange, RabbitMqConfig.testRoutingKey, "test message...");
            i++;
        }
    }
}

7. 打开rabbitmq管理面板,浏览器输入rabbitmq服务器 host:15672,默认登录 guest/guest

image.png

  1. 启动服务,并发送请求

image.png

image.png

  1. 控制台输出

image.png

image.png

  1. rabbitmq管理面板可见

image.png