SpringBoot整合RabbitMQ消息生产者

配置消息过期时间(TTL): https://www.jianshu.com/p/341c63cf0459
过期时间可以设置整个队列,也可以设置单条数据,同时设置以时间最短的为准。

死信队列(DLX):
将过期或队列满了放不下的消息,发送到死信交换机,通过死信交换机再发送到指定的队列。达到收集过期消息的目的。

延时队列:
过期时间配合私信队列可实现延时队列。设置一定的过期时间,消息到达过期时间后,由死信交换机发送到指定的队列,最后消费者去监听这个指定的队列即可。

pom:

<!--RabbitMQ依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

yml:

spring:
  rabbitmq:
    #RabbitMQ部署服务器ip
    host: 127.0.0.1
    #RabbitMQ端口
    port: 5672
    #用户名
    username: june
    #密码
    password: 123456
    #虚拟主机
    virtual-host: /VirtualTest

主启动:

@SpringBootApplication
public class ProducerApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(ProducerApplication.class, args);
    }

}

RabbitMQ工作模式:
1、工作队列模式-使用默认的交换机:生产者直接发送消息到队列,消费者到队列拿到。设置多个消费者,可实现多个消费者抢消息的功能。
在这里插入图片描述
2、路由模式:1对1发送消息,或者1对多分发消息。生产者通过exchange交换机不同的路由key,将消息分发到不同的消息队列。
在这里插入图片描述
3、通配符模式:路由模式升级版。使用exchange交换机,是路由模式的升级版,在给队列绑定key的时候使用通配符。通过通配符可以实现,消息发送给指定的多个队列。
在这里插入图片描述
在这里插入图片描述
订阅模式:类似于群发消息。使用exchange交换机,统一分发信息到绑定该交换机的所有队列。
在这里插入图片描述

配置类:

package com.student.config;


import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* 作者:June
* @author June
*/
@Configuration
public class RabbitMQConfig {
    
    
    //交换机名称
    public static final String EXCHANGE = "exchangeBoot";
    //队列名称
    private static final String QUEUE1 = "queueBoot1";
    //队列名称
    private static final String QUEUE2 = "queueBoot2";

    //注册交换机
    @Bean
    public Exchange exchange() {
    
    
        /* 交换机模式:
         *           fanout:订阅模式
         *           topic:通配符模式
         *           direct:路由模式
         *           headers:
        * */
        return ExchangeBuilder.topicExchange(EXCHANGE).durable(true).build();
    }
    //注册队列
    @Bean
    public Queue queue1() {
    
    
        return QueueBuilder.durable(QUEUE1).build();
    }
    //注册队列
    @Bean
    public Queue queue2() {
    
    
        return QueueBuilder.durable(QUEUE2).build();
    }
    //绑定队列和交换机
    @Bean
    public Binding itemQueueExchange1(@Qualifier("queue1")Queue queue1, @Qualifier("exchange")Exchange exchange) {
    
    
        //参数依次是队列对象、交换机对象、路由key
        return BindingBuilder.bind(queue1).to(exchange).with("queue.*").noargs();
    }
    //绑定队列和交换机
    @Bean
    public Binding itemQueueExchange2(@Qualifier("queue2")Queue queue2, @Qualifier("exchange")Exchange exchange) {
    
    
        //参数依次是队列对象、交换机对象、路由key
        return BindingBuilder.bind(queue2).to(exchange).with("queue.*").noargs();
    }
}

controller:

package com.student.controller;

import com.student.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* 作者:June
*/
@RestController
public class ProducerController {
    
    
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("/producer")
    public String produce(String message, String key) {
    
    
        //发送消息
        /*
        * 参数1:交换机名称
        * 参数2:路由key
        * 参数3:发送的消息
        * */
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE,key,message);
        return "发送消息成功!!!";
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_52877849/article/details/115022088