springboot集成rabbitmq简单使用

本文介绍了如何在SpringBoot项目中集成并使用RabbitMQ,从添加依赖到配置,再到创建发送和消费消息的类,最后通过Controller触发消息发送,实现简单的消息队列功能。遇到问题欢迎讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步,先搞一手儿依赖

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

第二步,在配置文件中进行配置

#使用本机的rabbitmq进行集成springboot的测试
spring.application.name=SpringBootRabbitMQ
​
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/graduation_info
​
#rabbitmq配置参数
rabbitmq.exchange=springBoot_exchange
rabbitmq.queue=springBoot_queue
rabbitmq.routingkey=key_direct
#rabbitmq消息确认
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true

第三步,配置一个rabbitmq的config配置类

@Configuration
public class RabbitConfig {
    @Value("${rabbitmq.queue}")
    public  String QUEUE_NAME;
    @Value("${rabbitmq.exchange}")
    public  String EXCHANGE_NAME;
    @Value("${rabbitmq.routingkey}")
    public  String ROUTING_KEY;
​
    // 创建queue
    @Bean
    public Queue queue() {;
        Map<String, Object> configMap = new HashMap<>();
        configMap.put("exchange", EXCHANGE_NAME);
        configMap.put("routing-key", ROUTING_KEY);
        configMap.put("x-message-ttl", 10000);
        return new Queue(QUEUE_NAME, true, false, false, configMap);
    }
​
​
//     创建exchange
    @Bean
    public DirectExchange exchange() {
        return new DirectExchange(EXCHANGE_NAME, true, false);
    }
​
    // 创建routing_key
    @Bean
    public Binding binding() {
        return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY);
    }
}

第四步,搞个发送类

@Component
@Slf4j
public class RabbitMqSend implements RabbitTemplate.ConfirmCallback{
    private RabbitTemplate rabbitTemplate;
    @Autowired
    RabbitConfig rabbitConfig;
    private RabbitAdmin rabbitAdmin;
    @Autowired
    public RabbitMqSend(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
        rabbitTemplate.setConfirmCallback(this);
    }
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if (!ack) {
            log.error("Sending RabbitMQ Object ERROR" );
        }else {
            log.info("发送成功");
        }
    }
    /*从这里头实现发送出rabbitmq的消息*/
    public void sendMessage(final String message) throws IllegalArgumentException {
        log.info("send message");
        rabbitTemplate.send(rabbitConfig.EXCHANGE_NAME, rabbitConfig.ROUTING_KEY, buildMessage(message.getBytes()));
    }
    public static Message buildMessage(byte[] value) {
        return MessageBuilder.withBody(value)
                .setMessageId(
                        "collection-recsync-" + UUID.randomUUID().toString())
                .build();
    }
}

第五步,再来个消费者listener监听消费爽一把

@Slf4j
@Component
public class RabbitListenerDemo {
    @RabbitListener(queues="springBoot_queue")
    public void receive(Message msg){
        log.info("收到消息为:"+new String(msg.getBody()));
    }
}

然后自己写个controller发个请求,最后控制台会打印出来发送和接收的消息就OK了

2019-05-13 16:29:24.748  INFO 69008 --- [nio-8080-exec-1] c.u.springboot.rabbitmq.RabbitMQManager  : send message
2019-05-13 16:29:24.760  INFO 69008 --- [cTaskExecutor-1] c.u.s.rabbitmq.RabbitListenerDemo        : 收到消息为:"测试"
2019-05-13 16:29:24.790  INFO 69008 --- [ 127.0.0.1:5672] c.u.springboot.rabbitmq.RabbitMQManager  : 发送成功

搞了半天才搞明白个基础的,有问题欢迎一起讨论,最后曼城是冠军,英超卫冕,瓜丢啦牛逼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值